找回密码
 加入
搜索
查看: 2546|回复: 12

文件拷贝问题

[复制链接]
发表于 2009-9-6 13:50:21 | 显示全部楼层 |阅读模式
看看下面的代码错在哪里了:
$Source = "F:\水木方XP3英文版.iso" ; directory to copy (2.7GB)
$Destination = "e:\"  ; copied to here

$FLTAR = _FileListToArrayR($Source, "",0,0, 1)
MsgBox(0,"",$FLTAR)
ProgressOn("Copying...", "Copy Progress")
For $i = 1 To $FLTAR[0]
    If StringInStr(FileGetAttrib($FLTAR[$i]), "D") Then
        DirCreate($Destination & StringReplace($FLTAR[$i], $Source, ""))
    Else   
        FileCopy($FLTAR[$i], $Destination & StringReplace($FLTAR[$i], $Source, ""), 9)
    EndIf
    ProgressSet((100/$FLTAR[0]) * $i, "Copied: " & StringMid($FLTAR[$i], StringInStr($FLTAR[$i], "\", 0, -1) + 1)&@CRLF & "Completed: " & Round((100/$FLTAR[0]) * $i) & "%")  
Next   


Func _FileListToArrayR($sPath, $sExFilter = "", $iFlag = 0, $iRecurse = 0, $iDepth = 0)
    Local $hSearch, $sFile, $sRxpFilter, $asFileList
    If Not $iDepth Then
        Global $sHoldFiles = ''
        If Not FileExists($sPath) Then Return SetError(1, 1, "")
        If StringRegExp($sExFilter, "[\\/<> :* ?]", 0) Then Return SetError(2, 2, "")
        If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
        If Not ($iRecurse = 0 Or $iRecurse = 1) Then Return SetError(4, 4, "")
    EndIf
    If StringRight($sPath, 1) <> "\" Then $sPath &= "\"
    If $sExFilter = "" Then
        $sRxpFilter = "."
    Else
        $sRxpFilter = "(?i)\.(" & $sExFilter & ")"
    EndIf
    $hSearch = FileFindFirstFile($sPath & "*")
    If $hSearch = -1 Then Return SetError(5, 5, "")
    While 1
        $sFile = FileFindNextFile($hSearch)
        If @error Then ExitLoop
        If StringInStr(FileGetAttrib($sPath & $sFile), "D") Then
            If Not $iRecurse And $iFlag = 1 Then ContinueLoop
            If $iRecurse Then
                _FileListToArrayR($sPath & $sFile, $sExFilter, $iFlag, $iRecurse, $iDepth + 1)
                If $iFlag <> 1 Then $sHoldFiles &= $sPath & $sFile & "|"
            Else
                $sHoldFiles &= $sPath & $sFile & "|"
            EndIf
        ElseIf StringRegExp($sFile, $sRxpFilter, 0) And $iFlag <> 2 Then
            $sHoldFiles &= $sPath & $sFile & "|"
        EndIf
    WEnd
    FileClose($hSearch)
    If Not $iDepth Then
        $asFileList = StringSplit(StringTrimRight($sHoldFiles, 1), "|")
        $sHoldFiles = ""
        Return $asFileList
    EndIf
EndFunc   ;==>_FileListToArrayR
 楼主| 发表于 2009-9-6 19:14:59 | 显示全部楼层
怎么没有高手出来说一下呀?
发表于 2009-9-6 21:07:32 | 显示全部楼层
错误描述不清楚。
 楼主| 发表于 2009-9-6 21:12:52 | 显示全部楼层
$FLTAR[0]
不是有效的数组变量.
发表于 2009-9-6 21:32:33 | 显示全部楼层
看看下面的代码错在哪里了:
$Source = "F:\水木方XP3英文版.iso" ; directory to copy (2.7GB)
$Destination = "e:\"  ; copied to here

$FLTAR = _FileListToArrayR($Source, "",0,0, 1)
MsgBox(0,"",$FLTAR) ...
redapple2008 发表于 2009-9-6 13:50



_FileListToArrayR($sPath, $sExFilter = "", $iFlag = 0, $iRecurse = 0, $iDepth = 0)
这个函数中说明白了,$iDepth = 0 则拆分为数组返回,否则不拆分,直接返回以|间隔的字符串,所以你这个例子中的调用_FileListToArrayR 的方法中,返回供$FLTAR 这个变量得到的就是一个字符串罢了,而在后续的利用中,你默认它为数组,所以报错。

请根据实际需要调整使用。

评分

参与人数 1贡献 +5 收起 理由
afan + 5

查看全部评分

 楼主| 发表于 2009-9-6 22:46:42 | 显示全部楼层
_FileListToArrayR($sPath, $sExFilter = "", $iFlag = 0, $iRecurse = 0, $iDepth = 0)
这个函数中说明白了,$iDepth = 0 则拆分为数组返回,否则不拆分,直接返回以|间隔的字符串,所以你这个例子中的调用_ ...
KiwiCsj 发表于 2009-9-6 21:32

还是没有修改成功.
 楼主| 发表于 2009-9-7 21:50:01 | 显示全部楼层
看来没有人理了?
 楼主| 发表于 2009-9-8 18:34:21 | 显示全部楼层
还是没有修改成功.
发表于 2009-9-8 21:28:31 | 显示全部楼层
在不在acn 的Q群里?找我kiwicsj.(123群我都在)
把要用的文件打包过来,我给你看一下问题出在哪里。
 楼主| 发表于 2009-9-9 21:48:09 | 显示全部楼层
在不在acn 的Q群里?找我kiwicsj.(123群我都在)
把要用的文件打包过来,我给你看一下问题出在哪里。
KiwiCsj 发表于 2009-9-8 21:28

就是这段代码,没有文件,只要执行正确就行了。
发表于 2009-9-10 00:15:25 | 显示全部楼层
那个函数貌似是针对文件夹的,你丢个文件给它就会造成数组错误
发表于 2009-9-10 02:37:17 | 显示全部楼层
而且对于单个文件,此函数及进度条均无意义
 楼主| 发表于 2009-9-12 08:26:57 | 显示全部楼层
就是这段代码,没有文件,只要执行正确就行了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-25 13:50 , Processed in 0.073116 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表