Sao chép thư mục - Delphi - TDirectory

Trên máy tính của tôi có một số phần mềm nguồn mở, thường được lưu trong một thư mục trên ổ D, nhưng tôi cần di chuyển chúng sang ổ C để sử dụng. Vì vậy, tôi đã viết một chương trình nhỏ để luyện tập kỹ năng.
Đơn vị IOUtils trong Delphi cung cấp các đối tượng hữu ích như TDirectory, TPath và TFile. Trong trường hợp này, tôi đã sử dụng TDirectory.
Các phương thức của TDirectory:
  • TDirectory.CreateDirectory(); {Tạo thư mục mới}
  • TDirectory.Exists(); {Kiểm tra thư mục có tồn tại không}
  • TDirectory.IsEmpty(); {Kiểm tra thư mục có trống không}
  • TDirectory.Copy(); {Sao chép thư mục}
  • TDirectory.Move(); {Di chuyển thư mục}
  • TDirectory.Delete(); {Xóa thư mục, tham số thứ hai là True để xóa thư mục không rỗng}
  • TDirectory.GetDirectoryRoot(); {Lấy gốc ổ đĩa, ví dụ: C:\}
  • TDirectory.GetCurrentDirectory(); {Lấy thư mục hiện tại}
  • TDirectory.SetCurrentDirectory(); {Thiết lập thư mục hiện tại}
Đây là một hàm để sao chép một thư mục:

function SaoChepThuMuc(sDuongDan: string; sDenDuongDan: string): Boolean;
begin
  if not TDirectory.Exists(sDuongDan) then
  begin
    Result := False;
    Exit;
  end;
  if TDirectory.Exists(sDenDuongDan) then
    TDirectory.Delete(sDenDuongDan, True);
  try
    TDirectory.Copy(sDuongDan, sDenDuongDan);
    Result := True;
  except
    Result := False;
  end;
end;
Để sử dụng các hàm trên, cần thêm:

uses
  IOUtils;
Trước đây, tôi đã từng sử dụng đoạn mã以下 để tham khảo:

function CopyDir(sDuongDan: string; sDenDuongDan: string): Boolean;
var
  Handle: Cardinal;
  Data: TWin32FindData;
  sCurrentDir: string;
  sPath: string;
begin
  sCurrentDir := GetCurrentDir;
  ChDir(sDuongDan);
  Handle := FindFirst('*.*', FILE_ATTRIBUTE_DIRECTORY, Data);
  if Handle <> INVALID_HANDLE_VALUE then
  begin
    if not DirectoryExists(sDenDuongDan) then
      ForceDirectories(sDenDuongDan);
    try
      repeat
        if (Data.cFileName = '.') or (Data.cFileName = '..') then
          Continue;
        sPath := Data.cFileName;
        if Data.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then
        begin
          if not DirectoryExists(sDenDuongDan + '\' + sPath) then
            ForceDirectories(sDenDuongDan + '\' + sPath);
          if sDuongDan[Length(sDuongDan)] <> '\' then
            CopyDir(sDuongDan + '\' + sPath, sDenDuongDan + '\' + sPath)
          else
            CopyDir(sDuongDan + sPath, sDenDuongDan + sPath);
        end
        else
          CopyFile(PChar(sPath), PChar(sDenDuongDan + '\' + sPath), True);
      until FindNext(Handle, Data) = False;
    finally
      FindClose(Handle);
    end;
  end
  else
  begin
    Result := False;
    Exit;
  end;
  ChDir(sCurrentDir);
  Result := True;
end;
Khi cần viết một chương trình, tôi chỉ viết nó; trong quá trình viết, nếu gặp vấn đề không biết, tôi tìm kiếm trên mạng; sau khi hoàn thành công việc, tôi không cần thiết phải chia sẻ rộng rãi.

Thẻ: Delphi TDirectory Sao chép thư mục IOUtils CopyFile

Đăng vào ngày 23 tháng 6 lúc 05:22