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.