Delphi文件夾複製

  1. Function DoCopyDir(sDirName:String;sToDirName:String;flag:boolean):Boolean;
  2. var
  3.   F: TSearchRec;
  4.   //hFindFile:Cardinal;
  5.   t,tfile:String;
  6.   sCurDir:String[255]; 
  7.   FindFileData:WIN32_FIND_DATA;
  8. begin
  9.  //先保存當前目錄 
  10.   sCurDir:=GetCurrentDir;
  11.   ChDir(sDirName);
  12.   F.FindHandle:=FindFirstFile('*.*',FindFileData);
  13.   if F.FindHandle<>INVALID_HANDLE_VALUE then
  14.   begin
  15.     if not DirectoryExists(sToDirName) then //如果目錄不存在
  16.       ForceDirectories(sToDirName); //強迫建立目錄
  17.     repeat
  18.       tfile:=FindFileData.cFileName;
  19.       if (tfile='.'or (tfile='..'then
  20.         Continue; //跳過兩個目錄標識
  21.       if FindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
  22.       begin
  23.         t:=sToDirName+'/'+tfile;
  24.         if not DirectoryExists(t) then
  25.           ForceDirectories(t);
  26.         if sDirName[Length(sDirName)]<>'/' then
  27.           DoCopyDir(sDirName+'/'+tfile,t,false)
  28.         else
  29.           DoCopyDir(sDirName+tfile,sToDirName+tfile,false);
  30.       end
  31.       else
  32.       begin
  33.         t:=sToDirName+'/'+tFile;
  34.         CopyFile(PChar(tfile),PChar(t),flag);
  35.       end;
  36.     until FindNextFile(F.FindHandle,FindFileData)=false;
  37.     FindClose(F);
  38.   end
  39.   else
  40.   begin
  41.     ChDir(sCurDir);
  42.     result:=false;
  43.     exit;
  44.   end;
  45.   //回到原來的目錄下
  46.   ChDir(sCurDir);
  47.   result:=true;
  48. end;

詳:

sDirName:源文件夾

sToDirName:目標文件夾

flag:目標文件已存在時的處理辦法。TRUE則不覆蓋並返回失敗標記,FALSE則覆蓋。
注:

此函數在覆蓋拷貝時,我測試過文本文件可以覆蓋,但是報表文件無法覆蓋,其它文件我推斷也無法覆蓋

 

 

  1. Function Copy_Dir(SourceDir,DestDir:String;nLx:Integer):Boolean;
  2. Var
  3.   Opstruc:   TshFileOpStruct;
  4.   frombuf,tobuf:   Array[0..128]   of   Char;
  5. begin
  6.   FillChar(frombuf,Sizeof(frombuf),0);
  7.   FillChar(tobuf,Sizeof(tobuf),0);
  8.   StrPcopy(frombuf,SourceDir);
  9.   Case nLx of
  10.     1:
  11.       StrPcopy(tobuf,DestDir);
  12.   end;
  13.   With Opstruc Do
  14.   Begin
  15.     Wnd:=0;
  16.     Case nLx of
  17.       1: wFunc:=FO_COPY;
  18.       2: wFunc:=FO_DELETE;
  19.       Else wFunc:=FO_COPY;
  20.     end;
  21.     pFrom:=@frombuf;
  22.     pTo:=@tobuf;
  23.     fFlags:=FOF_NOCONFIRMATION;
  24.     fAnyOperationsAborted:=False;
  25.     hNameMappings:=Nil;
  26.     lpszProgressTitle:=Nil;
  27.   end;
  28.   try
  29.     ShFileOperation(OpStruc);
  30.     Result:=True;
  31.   except
  32.     Result:=False;
  33.   end;
  34. end;

詳:

SourceDir:源文件夾

DestDir:目標文件夾

nLx:爲1表示複製,存在則覆蓋;爲2表示刪除源文件。

注:此函數可以複製報表類文件

發佈了58 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章