移动大文件的问题。 ( 积分: 100 )

  • 主题发起人 主题发起人 WangZhaoHui
  • 开始时间 开始时间
W

WangZhaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
如果手工在windows的C盘下将c:/a.avi 剪切到 c:/save/a.avi 下只需要很少的时间就粘贴过去了。(文件大概有400M,同盘符不同的文件夹之间进行移动)<br>但我使用这个函数在同一个盘符下移动文件确需要很长时间,是我哪个参数设置的不对吗。还是我需要使用Clipboard来剪切文件呢。<br>function MoveFile(const Source, Dest: string): Boolean;<br>var<br> &nbsp;fo: TSHFILEOPSTRUCT;<br>begin<br> &nbsp;FillChar(fo, SizeOf(fo), 0);<br> &nbsp;with fo do<br> &nbsp;begin<br> &nbsp; &nbsp;Wnd := 0;<br> &nbsp; &nbsp;wFunc := FO_MOVE;<br> &nbsp; &nbsp;pFrom := PChar(Source + #0);<br> &nbsp; &nbsp;pTo := PChar(Dest + #0);<br> &nbsp; &nbsp;fFlags := FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR;<br> &nbsp;end;<br> &nbsp;Result := (SHFileOperation(fo) = 0);<br>end;
 
如果手工在windows的C盘下将c:/a.avi 剪切到 c:/save/a.avi 下只需要很少的时间就粘贴过去了。(文件大概有400M,同盘符不同的文件夹之间进行移动)<br>但我使用这个函数在同一个盘符下移动文件确需要很长时间,是我哪个参数设置的不对吗。还是我需要使用Clipboard来剪切文件呢。<br>function MoveFile(const Source, Dest: string): Boolean;<br>var<br> &nbsp;fo: TSHFILEOPSTRUCT;<br>begin<br> &nbsp;FillChar(fo, SizeOf(fo), 0);<br> &nbsp;with fo do<br> &nbsp;begin<br> &nbsp; &nbsp;Wnd := 0;<br> &nbsp; &nbsp;wFunc := FO_MOVE;<br> &nbsp; &nbsp;pFrom := PChar(Source + #0);<br> &nbsp; &nbsp;pTo := PChar(Dest + #0);<br> &nbsp; &nbsp;fFlags := FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR;<br> &nbsp;end;<br> &nbsp;Result := (SHFileOperation(fo) = 0);<br>end;
 
直接在操作系统中移动文件,也是这种情况!<br>同盘符的移动,文件本身并不移动,只是修改文件的一些属性(比如该文件的存放路径由c:/编程c:/save等等),而不同盘符之间的移动,是移动文件本身;所以速度要慢一些!<br>以上是个人观点!
 
我只需要在同盘符移动,但是也需要花费很多时间。
 
那试试看先复制,然后在删除源文件呢?
 
主要我是因为同盘符复制粘贴时间长,而剪切粘贴时间短才有此一问的。可能用剪切板也行,但我不太会。
 
直接使用Delphi封装好的函数MoveFile或者MoveFileEx就可以了啊<br>速度还是很快的<br>我都是使用一个单独的线程进行处理的
 
给你一个我刚刚写的函数吧,我在本机测试的速度还能接受!:)<br><br>function TForm1.MoveFile(AFileName, ToPath: string): boolean;<br>var<br> &nbsp;fsTemp:SHFILEOPSTRUCT;<br>begin<br> &nbsp;with fsTemp do<br> &nbsp;begin<br> &nbsp; &nbsp;Wnd := Self.Handle;<br> &nbsp; &nbsp;//设置文件操作类型<br> &nbsp; &nbsp;wFunc :=FO_MOVE;<br> &nbsp; &nbsp;//允许执行撤消操作<br> &nbsp; &nbsp;fFlags :=FOF_ALLOWUNDO;<br> &nbsp; &nbsp;//源文件全路径名<br> &nbsp; &nbsp;pFrom := PChar(AFileName);<br> &nbsp; &nbsp;//要复制到的路径<br> &nbsp; &nbsp;pTo := PChar(ToPath);<br> &nbsp; &nbsp;lpszProgressTitle := '移动文件';<br> &nbsp;end;<br><br> &nbsp;result := (SHFileOperation(fsTemp) = 0);<br>end;
 
有会有剪切板的吗。在windows里连一秒都用不了的。
 
分区后的文件在不同盘符下移动速度是不同啊<br>磁头定位需要时间
 
但我只需要在同盘符移动。所以速度慢我接受不了的。
 
我的方法在我的机子上也只用了1秒钟而已!
 
to royal1442:你的函数和我标题上的那个函数差不多。我的文件很大的.有几百M。
 
不好意思!我移动的文件是420M,也就一秒钟!
 
为什么要自己写啊,不是有系统函数MoveFile么,很快的
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部