急急急!!! copyFile使用問題(50分)

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

wanby

Unregistered / Unconfirmed
GUEST, unregistred user!
請教各位,為會什麼在有的98系統中能用,而有的98系統中卻不行?<br>代碼如下:<br>&nbsp; &nbsp;copy('//server/in/abc.exe','c:/abc.exe',false)<br><br>怎麼才能解決此問題(不要告訴我重裝系統).<br>
 
Delphi中有关文件操作的函数不少,但唯独没有提供一个文件拷贝函数。出于实际编<br>程的需要,笔者总结了几种在Delphi中进行文件拷贝的方法,这几种方法都在Delphi 3.0、<br>&nbsp;4.0下通过,有兴趣的读者可以将它们转化成函数以方便调用。<br><br><br>  方法1(强力推荐)<br><br><br>  通过调用Win 95系统外壳来完成,需要在USES子句中添加SHELLAPI单元。这种方法<br>与Win 95下文件拷贝的方式完全一样,也会自动出现“正在拷贝...”的提示。如果目标<br>文件已经存在,函数可以根据操作标志位自动生成多份复件。<br><br>  改变wFunc的值,则可以完成删除、更名、放到回收站等功能。笔者认为这是最好的<br>一种方法。<br><br>  procedure TForm1.Button5Click(Sender: TObject);<br><br>  var<br><br>  F:TShFileOpStruct;<br><br>  begin<br><br>  F.wnd:=Handle;<br><br>  F.wFunc:=FO—COPY; {操作方式}<br><br>  F.pFrom:=′C:/DEMO.DAT′;<br><br>  F.pTo:=′F:/TEST.DAT′;<br><br>  F.fFlags:=FOF—ALLOWUNDO OR FOF—RENAMEONCOLLISION; {操作选项}<br><br>  if ShFileOperation(F)&lt;&gt;0 then<br><br>  ShowMessage(′文件拷贝失败!′);<br><br>  end;<br><br><br>  ?方法2 (推荐使用)<br><br><br>  采用文件流方式,可以直接对文件进行读写。<br><br>  procedure TForm1.Button2Click(Sender: TObject);<br><br>  Var<br><br>   S, T: TFileStream; {文件流}<br><br>   SourceFileName,DestFileName:String;{源文件和目的文件名}<br><br>  Begin<br><br>   S := TFileStream.Create( SourceFileName, fmOpenRead );<br><br>   try<br><br>   T := TFileStream.Create( DestFileName,fmOpenWrite or fmCreate );<br><br>   try<br><br>   T.CopyFrom(S, S.Size ) ;<br><br>  finally<br><br>   T.Free;<br><br>  end;<br><br>   finally<br><br>   S.Free;<br><br>   end; End;<br><br><br>  ?方法3(推荐在做安装盘时使用)<br><br><br>  采用压缩与解压缩单元LZEXPAND,需要在USES子句中添加LZEXPAND单元。<br><br>  procedure TForm1.Button3Click(Sender: TObject);<br><br>  var<br><br>   SourceHandle, DestHandle: Integer; {文件句柄}<br><br>   SourceFileName,DestFileName:String;{源文件和目的文件名}<br><br>   begin<br><br>   {打开文件}<br><br>   SourceFileName:=′C:/DEMO.DAT′;<br><br>   DestFileName:=′F:/TEST.DAT′;<br><br>   SourceHandle := FileOpen(SourceFileName,0);<br><br>   DestHandle := FileCreate(DestFileName);<br><br>   {拷贝}<br><br>   LZCopy(SourceHandle,DestHandle);<br><br>   {关闭文件}<br><br>   FileClose(SourceHandle);<br><br>   FileClose(DestHandle)<br><br>  end;<br><br><br>  ?方法4(推荐使用)<br><br><br>  采用内存流,内存流可直接将文件数据存放到内存中,代码简单,速度很快。<br><br>  procedure TForm1.Button4Click(Sender: TObject);<br><br>  var<br><br>   SourceFileName,DestFileName: String;<br><br>  begin<br><br>   with TMemoryStream.Create do<br><br>   try<br><br>   LoadFromFile(SourceFileName);<br><br>   SaveToFile(DestFileName);<br><br>   finally<br><br>   Free;<br><br>   end; end;<br><br><br>  ?方法5(不常用)<br><br><br>  采用最基本的文件读写,每次读写一个块。但如果源文件是只读属性,本方法不适<br>用,会出现文件存取错误。<br><br>  procedure TForm1.Button1Click(Sender: TObject);<br><br>  var<br><br>   SourceF,DestoF: File; {文件变量}<br><br>   NumRead, NumWritten: Integer;{读写字节数}<br><br>   Buf: array[1..2048] of Char; {缓冲区大小}<br><br>   SourceFileName,DestFileName:String;{源文件和目的文件名}<br><br>  begin<br><br>   SourceFileName:= ′C:/DEMO.DAT′;<br><br>   DestFileName:=′F:/TEST.DAT′;<br><br>   AssignFile(SourceF, SourceFileName);<br><br>   Reset(SourceF, 1); { Record size = 1 }<br><br>   AssignFile(DestF, DestFileName); { Open output file }<br><br>   Rewrite(DestF, 1); { Record size = 1 }<br><br>   repeat<br><br>   BlockRead(SourceF, Buf, SizeOf(Buf), NumRead);<br><br>   BlockWrite(DestF, Buf, NumRead, NumWritten);<br><br>   until (NumRead = 0) or (NumWritten &lt;&gt; NumRead);<br><br>   CloseFile(SourceF);<br><br>   CloseFile(DestF);<br><br>  end;<br><br> 
 
天啊,我的程序里面也是这么写的啊:(
 
检查你98上登陆时的用户名和密码是不是Server(NT, 2000)上有效的用户, 一般如果<br>98登陆的用户不是Server上的用户, 这样是不会成功的.
 
调用Windows API,如下:<br>---------------------------------------<br>【声明】<br>&nbsp; Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long<br><br>【说明】<br>&nbsp; 复制文件。与vb的filecopy命令相似<br><br>【返回值】<br>&nbsp; Long,非零表示成功,零表示失败。会设置GetLastError<br><br>【参数】<br>&nbsp; lpExistingFileName - &nbsp;String,源文件名<br><br>&nbsp; lpNewFileName -- &nbsp;String,目标文件名<br><br>&nbsp; bFailIfExists -- &nbsp;Long,如果设为TRUE(非零),那么一旦目标文件已经存在,则函数调用会失败。否则目标文件被改写<br><br>
 
to:yaya8163<br>您好!第一種和第五種方法我都試過,在用copyFile的那台電腦上使用一樣不行.我是在dll文件中使用的.dll文件拷在當前目錄下. <br>至于其它用戶,權限什麼的我早已檢查過,沒問題!
 
你在网上邻居里可以拷贝么?
 
可能是你没有登录//server
 
server文件坏或不支持//server 格式 换 ip地址方式
 
to: tseug;<br>可以!
 
to sxqsxq:<br>我的dll文件中還有函數要讀取//server 中iniFile 格式也是用'//server'卻能讀取得到!
 
難道沒有碰到過這種古怪問題嗎?
 
C:/ 有重名文件?
 
多人接受答案了。
 
后退
顶部