xiaojinglf 发表于 2010-5-7 05:41:52

复制文件的一个问题(已解决)

本帖最后由 xiaojinglf 于 2010-5-11 20:55 编辑

我在使用dircopy复制文件当中,如果出现某一个文件复制失败(比如某个文件被杀软误报拦截后),整个dircopy复制过程就结束了。有什么办法可以忽略此问题而继续复制后续文件的参数呢?例如xpcopy的/c参数。

我查过帮助文件,么有找到方法。请大家赐教。

sky808 发表于 2010-5-7 05:57:10

不怕麻烦用FileCopy循环完成。

xiaojinglf 发表于 2010-5-8 08:37:32

不怕麻烦用FileCopy循环完成。
sky808 发表于 2010-5-7 05:57 http://www.autoitx.com/images/common/back.gif

怎么循环法啊。
我的意思是:对于被阻止的文件不再重试了。跳过继续。

lynfr8 发表于 2010-5-8 18:02:46

思路:
1.将需要复制的文件文件名写入数组
2.通过循环语句执行FileCopy,若失败则返回值为0 ,记录此元素,继续执行FileCopy
3.如果文件完全复制,提示完毕;反之,提示未执行复制的元素

xiaojinglf 发表于 2010-5-8 20:52:35

思路:
1.将需要复制的文件文件名写入数组
2.通过循环语句执行FileCopy,若失败则返回值为0 ,记录此元素 ...
lynfr8 发表于 2010-5-8 18:02 http://www.autoitx.com/images/common/back.gif


    由于复制的文件太多了。而且包含子文件夹。且文件名无共同点。写入数组就困难了。

lynfr8 发表于 2010-5-8 20:55:56

#include <File.au3>

_FileRecur(@WindowsDir)
MsgBox(64, '', 'done')

Func _FileRecur($_Path)
      $folder = _FileListToArray($_Path, "*", 2)
      If Not IsArray($folder) Then Return 0
      For $o = 1 To $folder
                MsgBox(0, '', $_Path & "\" & $folder[$o])
                _FileRecur($_Path & "\" & $folder[$o])
      Next
EndFunc获取某文件夹下的所有文件及子文件夹

afan 发表于 2010-5-8 20:56:28

根据楼上的提示,LZ可以自己写个 _DirCopy()

xiaojinglf 发表于 2010-5-8 22:11:03

好。我试一下。谢谢

xiaojinglf 发表于 2010-5-9 09:31:42

本帖最后由 xiaojinglf 于 2010-5-9 14:08 编辑

回复 6# lynfr8
我试了一下,filecopy的确可以跳过错误文件继续。dircopy遇到错误就会退出。
#include <File.au3>
_FileRecur(@ProgramFilesDir & "\soft")
MsgBox(64, '', 'done')

Func _FileRecur($_Path)
      $folder = _FileListToArray($_Path, "*", 0)
      If Not IsArray($folder) Then Return 0
      For $o = 1 To $folder
                _FileRecur($_Path & "\" & $folder[$o])
                FileCopy ($_Path, "d:\soft",9)
                Next
EndFunc
Exit
$folder[$o]可能是文件也可能是文件夹。所以不知道怎么恢复目录结构。复制到目标位置后都是文件,没有目录结构了。
我刚学这个。不知道该怎么写了。最后我还是调用了xcopy来完成的。
但是我还是希望高手能帮我写出这个例子。我也可以从中学习思维方式。
感谢以上二位的指导。

menfan1 发表于 2010-5-11 10:54:50

其实xcopy带参数简单啊呵呵

C.L 发表于 2010-5-11 12:01:48

本帖最后由 C.L 于 2010-5-11 12:03 编辑

回复 9# xiaojinglf

要目录结构代码稍加处理就行了:
#include <File.au3>
$sfolder = @ProgramFilesDir & "\soft"
$pathlen = StringLen($sfolder)
_FileRecur($sfolder)
MsgBox(64, '', 'done')

Func _FileRecur($_Path)
        $folder = _FileListToArray($_Path, "*", 0)
        If Not IsArray($folder) Then Return 0
        For $o = 1 To $folder
                _FileRecur($_Path & "\" & $folder[$o])
                FileCopy ($_Path, "d:\soft\"&StringTrimLeft($_Path,$pathlen)&"\",9)
                Next
EndFunc

xiaojinglf 发表于 2010-5-11 20:58:11

本帖最后由 xiaojinglf 于 2010-5-12 07:58 编辑

回复xiaojinglf

要目录结构代码稍加处理就行了:
C.L 发表于 2010-5-11 12:01 http://www.autoitx.com/images/common/back.gif
感谢解答。运行很成功,我会好好研究一下的。
多谢以上各位帮助。

boyhong 发表于 2010-5-12 07:27:05

11 楼完美。。

t87564833 发表于 2010-6-13 10:19:46

过来学习的
页: [1]
查看完整版本: 复制文件的一个问题(已解决)