关于文件复制的覆盖问题(100分)

  • 主题发起人 主题发起人 fuku
  • 开始时间 开始时间
F

fuku

Unregistered / Unconfirmed
GUEST, unregistred user!
关于文件复制的问题,小弟想将 C:/aaa目录下的文件拷贝到 D盘新建的目录bbb下<br>(程序中指定),若bbb已存在,则提示覆盖。<br>代码如下:<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; OpStruc: TSHFileOpStruct;<br>&nbsp; frombuf, tobuf: Array [0..128] of Char;<br>begin<br>&nbsp; FillChar( frombuf, Sizeof(frombuf), 0 );<br>&nbsp; FillChar( tobuf, Sizeof(tobuf), 0 );<br>&nbsp; StrPCopy( frombuf, 'c:/aaa' );<br>&nbsp; StrPCopy( tobuf, 'd:/bbb' );<br>&nbsp; With OpStruc DO Begin<br>&nbsp; &nbsp; Wnd:= Handle;<br>&nbsp; &nbsp; wFunc:= FO_COPY;<br>&nbsp; &nbsp; pFrom:= @frombuf;<br>&nbsp; &nbsp; pTo:=@tobuf <br>&nbsp; &nbsp; fFlags:=FOF_SIMPlEPROGRESS; &nbsp;(1)处<br>&nbsp; &nbsp; fAnyOperationsAborted:= False;<br>&nbsp; &nbsp; hNameMappings:= Nil;<br>&nbsp; &nbsp; lpszProgressTitle:= Nil;<br>&nbsp; end;<br>&nbsp; ShFileOperation( OpStruc );<br>end;<br>第一次执行此程序,之前D盘bbb目录不存在,结果一切正常;<br>第二次执行程序,则会在bbb目录下建立aaa目录,结果是 C:/aaa目录下<br>的文件拷到了 D:/bbb/aaa下;若再执行,则提示aaa目录已存在,选择<br>覆盖的结果是 C:/aaa目录下的文件覆盖了 D:/bbb/aaa下的文件。<br>(1)处的fFlags赋任何值结果都一样。若去掉(1)处语句,即不给fFlags<br>赋值的话,则情况变为:第一次执行,同上正常;第二次执行,在D盘根<br>目录下建立了aaa目录,C:/aaa下的文件拷到了D:/aaa下;再次执行,则<br>是 C:/aaa下的文件覆盖了 D:/aaa下的文件。无论如何都实现不了小弟<br>的初衷,特向诸位大哥长请教,烦请答复,谢谢!
 
<br>&nbsp; StrPCopy( frombuf, 'c:/aaa/*.*' );<br>&nbsp; StrPCopy( tobuf, 'd:/bbb' );<br><br>&nbsp; mkdir('d:/bbb');<br>&nbsp; ShFileOperation( OpStruc );<br>
 
to mikedeakins<br>如果bbb目录已存在,再mkdir有用吗?
 
没用,可是好像不会出错。这主要是防止 d:/bbb 不存在,恐怕会把所有的文件<br>复制到 d:/bbb 文件中(copy a+b c)。
 
mikedeakins:<br>我试过了,若bbb目录已存在,再mkdir会报I/O错误,不过加了*.*倒是有用,谢了!<br>
 
接受答案了.
 
后退
顶部