- Function DoCopyDir(sDirName:String;sToDirName:String;flag:boolean):Boolean;
- var
- F: TSearchRec;
- //hFindFile:Cardinal;
- t,tfile:String;
- sCurDir:String[255];
- FindFileData:WIN32_FIND_DATA;
- begin
- //先保存當前目錄
- sCurDir:=GetCurrentDir;
- ChDir(sDirName);
- F.FindHandle:=FindFirstFile('*.*',FindFileData);
- if F.FindHandle<>INVALID_HANDLE_VALUE then
- begin
- if not DirectoryExists(sToDirName) then //如果目錄不存在
- ForceDirectories(sToDirName); //強迫建立目錄
- repeat
- tfile:=FindFileData.cFileName;
- if (tfile='.') or (tfile='..') then
- Continue; //跳過兩個目錄標識
- if FindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
- begin
- t:=sToDirName+'/'+tfile;
- if not DirectoryExists(t) then
- ForceDirectories(t);
- if sDirName[Length(sDirName)]<>'/' then
- DoCopyDir(sDirName+'/'+tfile,t,false)
- else
- DoCopyDir(sDirName+tfile,sToDirName+tfile,false);
- end
- else
- begin
- t:=sToDirName+'/'+tFile;
- CopyFile(PChar(tfile),PChar(t),flag);
- end;
- until FindNextFile(F.FindHandle,FindFileData)=false;
- FindClose(F);
- end
- else
- begin
- ChDir(sCurDir);
- result:=false;
- exit;
- end;
- //回到原來的目錄下
- ChDir(sCurDir);
- result:=true;
- end;
詳:
sDirName:源文件夾
sToDirName:目標文件夾
flag:目標文件已存在時的處理辦法。TRUE則不覆蓋並返回失敗標記,FALSE則覆蓋。
注:
此函數在覆蓋拷貝時,我測試過文本文件可以覆蓋,但是報表文件無法覆蓋,其它文件我推斷也無法覆蓋
- Function Copy_Dir(SourceDir,DestDir:String;nLx:Integer):Boolean;
- Var
- Opstruc: TshFileOpStruct;
- frombuf,tobuf: Array[0..128] of Char;
- begin
- FillChar(frombuf,Sizeof(frombuf),0);
- FillChar(tobuf,Sizeof(tobuf),0);
- StrPcopy(frombuf,SourceDir);
- Case nLx of
- 1:
- StrPcopy(tobuf,DestDir);
- end;
- With Opstruc Do
- Begin
- Wnd:=0;
- Case nLx of
- 1: wFunc:=FO_COPY;
- 2: wFunc:=FO_DELETE;
- Else wFunc:=FO_COPY;
- end;
- pFrom:=@frombuf;
- pTo:=@tobuf;
- fFlags:=FOF_NOCONFIRMATION;
- fAnyOperationsAborted:=False;
- hNameMappings:=Nil;
- lpszProgressTitle:=Nil;
- end;
- try
- ShFileOperation(OpStruc);
- Result:=True;
- except
- Result:=False;
- end;
- end;
詳:
SourceDir:源文件夾
DestDir:目標文件夾
nLx:爲1表示複製,存在則覆蓋;爲2表示刪除源文件。
注:此函數可以複製報表類文件