帮助: Returns zero if successful or nonzero if an error occurs. if ShFileOperation(f)=0 then ShowMessage('成功');
TO liangqingzhi(老之): 比如复制一个文件需要30秒的时间,而以上两个函数进行复制时,只要是可以进行复制就立刻返回,并不是等到30秒复制完毕后才返回的。
其实你可以多个文件一起复制的。 f.pFrom后面的多个文件名用#0#0隔开就可以了。
To liangqingzhi(老之): 我这个问题不涉及多文件的复制哦,大概我写的问题有歧义吧,我的意思是复制完一个文件后,马上要对这个新复制好的文件进行操作。
用DELPHI提供的函数来完成不就行了
TO SonicX(SonicX): 请问用哪一个delphi函数可以判断文件已复制完成呢?
var S:TMemoryStream; begin S:=TMemoryStream.Create; S.LoadFromFile('c:\testA.txt'); S.SaveToFile('c:\testB.txt'); showmessage('已复制完'); //继续执行代码.... end;
比如复制一个文件需要30秒的时间,而以上两个函数进行复制时,只要是可以进行复制就立刻返回,并不是等到30秒复制完毕后才返回的。
f.pFrom后面的多个文件名用#0#0隔开就可以了。
我这个问题不涉及多文件的复制哦,大概我写的问题有歧义吧,我的意思是复制完一个文件后,马上要对这个新复制好的文件进行操作。
请问用哪一个delphi函数可以判断文件已复制完成呢?
S:TMemoryStream;
begin
S:=TMemoryStream.Create;
S.LoadFromFile('c:\testA.txt');
S.SaveToFile('c:\testB.txt');
showmessage('已复制完');
//继续执行代码....
end;
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
我后来也使用了流对象自己进行文件复制,用的是文件流对象,也就是流的操作结束了以后才会做后边的操作,这样满足了我的要求,呵呵:)
非常感谢您给的资料,CopyFile和ShFileOperation的确如您所说的那样,我现在使用文件流进行了文件复制,满足了我的要求,呵呵:)