用ShFileOperation 拷贝文件的出错(100分)

  • 主题发起人 主题发起人 cheka
  • 开始时间 开始时间
C

cheka

Unregistered / Unconfirmed
GUEST, unregistred user!
function CopyFile(SourceName,TargetName:String):Boolean;<br>var<br>&nbsp; F:TShFileOpStruct;<br>begin<br>&nbsp; F.wnd:=InputForm.Handle;<br>&nbsp; F.wFunc:=FO_COPY; {操作方式}<br>&nbsp; F.pFrom:=PChar(SourceName);<br>&nbsp; F.pTo:=PChar(TargetName);<br>&nbsp; F.fFlags:=FOF_ALLOWUNDO OR FOF_RENAMEONCOLLISION; <br>&nbsp; result:= ShFileOperation(F)=0<br>end;<br><br>会随机出现错误 "无法复制文件,文件系统错误 (1026)" <br>
 
复制系统文件就会出现此错误.如果是其他文件就没问题.
 
拷贝的是普通文件啊,<br>最要命的是时好时坏。
 
普通文件的文件属性为+s也不行.
 
这个倒没注意,但应该不是s型的吧,明天再去看看。分先替你留着,嘿嘿。
 
F.pFrom:=PChar(SourceName+#0);<br>我想这样不会再有什么问题了。<br>&nbsp;
 
最后一个sourceName要加#0#0。
 
从ex-ex替你查到....<br><br>function CopyFile(SourceName,TargetName:String):Boolean;<br>var<br>&nbsp; F:TShFileOpStruct;<br>begin<br>&nbsp; F.wnd:=InputForm.Handle;<br>&nbsp; F.wFunc:=FO_COPY; {操作方式}<br>&nbsp; F.pFrom:=PChar(SourceName+#0#0);<br>&nbsp; F.pTo:=PChar(TargetName+#0#0);<br>&nbsp; F.fFlags:=FOF_ALLOWUNDO OR FOF_RENAMEONCOLLISION;<br>&nbsp; result:= ShFileOperation(F)=0;<br>end;<br>
 
from 和 to 实际上是“多个null结束的字符串”,可以带多个文件名同时做。<br>比如: 'f1.txt'#0'f2.txt'#0'f3.txt'#0#0 可以同时做 f1.txt和f2.txt和f3.txt<br>3个文件, 最后要多一个0表示全部结束了
 
后退
顶部