现在有这样的需求,复制一个文件后马上要进行一个对新复制文件的操作,那么就要求文件必须是复制完成的,但现在不知道怎么判断文件已经复制完成,用CopyFile或者ShFileOperation好象都不能得到这个完成的信息,请各位朋友帮忙看看,谢谢:)

解决方案 »

  1.   

    帮助: Returns zero if successful or nonzero if an error occurs. if ShFileOperation(f)=0 then ShowMessage('成功');
      

  2.   

    TO liangqingzhi(老之):
    比如复制一个文件需要30秒的时间,而以上两个函数进行复制时,只要是可以进行复制就立刻返回,并不是等到30秒复制完毕后才返回的。
      

  3.   

    其实你可以多个文件一起复制的。
    f.pFrom后面的多个文件名用#0#0隔开就可以了。
      

  4.   

    To liangqingzhi(老之):
    我这个问题不涉及多文件的复制哦,大概我写的问题有歧义吧,我的意思是复制完一个文件后,马上要对这个新复制好的文件进行操作。
      

  5.   

    用DELPHI提供的函数来完成不就行了
      

  6.   

    TO SonicX(SonicX):
    请问用哪一个delphi函数可以判断文件已复制完成呢?
      

  7.   

    var
     S:TMemoryStream;
    begin
     S:=TMemoryStream.Create;
     S.LoadFromFile('c:\testA.txt');
     S.SaveToFile('c:\testB.txt');
     showmessage('已复制完');
     //继续执行代码....
    end;
      

  8.   

    API函数CopyFile和ShFileOperation一般都是在单独的线程中运行,所以不会让你程序停下来单独等待,正如我们在windows文件下拷贝文件的时候,我们还可以对文件夹下的其它文件继续操作一样。但也正如Windows在执行的拷贝的时候会给我们提供一个可视化的进度条一样,拷贝过程是可以跟踪的。那就是利用API函数给我们提供的CallBack函数。CopyFile没有CallBack函数,但是CopyFileEx有:
    BOOL CopyFileEx(
      LPCTSTR lpExistingFileName,
      LPCTSTR lpNewFileName,
      LPPROGRESS_ROUTINE lpProgressRoutine,
      LPVOID lpData,
      LPBOOL pbCancel,
      DWORD dwCopyFlags
    );
    参见MSDN:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/copyfileex.aspSHFileOperation也有回调函数,答案是定义它的参数结构:
    typedef struct _SHFILEOPSTRUCT {
        HWND hwnd;
        UINT wFunc;
        LPCTSTR pFrom;
        LPCTSTR pTo;
        FILEOP_FLAGS fFlags;
        BOOL fAnyOperationsAborted;
        LPVOID hNameMappings;
        LPCTSTR lpszProgressTitle;
    } SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;参见MSDN:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/shfileopstruct.asp
      

  9.   

    To SonicX(SonicX):
    我后来也使用了流对象自己进行文件复制,用的是文件流对象,也就是流的操作结束了以后才会做后边的操作,这样满足了我的要求,呵呵:)
      

  10.   

    To tttk(网络芝麻) :
    非常感谢您给的资料,CopyFile和ShFileOperation的确如您所说的那样,我现在使用文件流进行了文件复制,满足了我的要求,呵呵:)