File (tệp - tập tin) được lưu trên đĩa cứng và không bị mất khi tắt máy. Nhờ file ta có thể lưu dữ liệu lại cho lần sau sử dụng. Xem thêm về file trong các giáo trình Pascal.
Nói chung, Delphi cung cấp rất nhiều cách thức khác nhau để truy cập và thao tác trên file được thuận tiện nhất. Các cách phổ biến sẽ được trình bày bên dưới. Các bạn dùng cách này thấy dễ và thuận tiện nhất là được.
File văn bản là loại file thường gặp và thông dụng nhất.
Có một số điểm khác biệt trong Pascal với Delphi:
var
F: TextFile;
...
begin
AssignFile(F, '1.txt', TEncoding.UTF8);
ReWrite(F);
WriteLn(F, 'ABCDEF');
Write(F, 123);
CloseFile(F);
end.
Để ý đến thủ tục Assign với tham số thứ ba. Tham số thứ 3 trong AssignFile xác định codepage của file đó (cách mã hóa nội dung). Thường thì để trống là mặc định mã hóa ANSI (không lưu được tiếng Việt có dấu), ta có thể tùy chỉnh kiểu mã hóa sang UTF8 (sử dụng TEncoding.UTF8) để lưu được Tiếng Việt trong file.
Các hàm, thủ tục khác với file tương tự như trong pascal.
Vui lòng xem trước bài Cấu trúc bắt lỗi để nắm được sơ lược.
var
F: TextFile;
begin
AssignFile(F, '1.txt');
try
Reset(F);
Read(F, s);
CloseFile(F);
except
Write('Co loi xay ra');
end;
end.
Kĩ thuật trên dùng nhiều trong việc mở file để đọc dữ liệu.
Trong unit System.SysUtils có định nghĩa một số hàm, thủ tục xử lí file nhanh.
A. Kiểm tra file có tồn tại hay không
begin
if FileExists('Word.docx') = true then
Write('Ton tai')
else
Write('Khong ton tai');
end.
Hàm FieleExists trả về một kiểu boolean, true nếu như tìm thấy file, hoặc false nếu không tìm thấy.
B. Xóa nhanh file
begin
if DeleteFile('Word.docx') = true then
Write('Xoa file thanh cong')
else
Write('Khong xoa duoc file');
end.
C. Đổi tên nhanh file
begin
if RenameFile('Word.docx', 'Document.docx') = true then
Write('Doi ten file thanh cong')
else
Write('Khong xoa duoc file');
end.
Delphi cung cấp rất nhiều hàm, thủ tục khác nhau để thao tác với file được linh hoạt và thuận tiện nhất. Thư viện IOUtils cung cấp một lớp thực TFile (không cần tạo ra object) có thể sử dụng trực tiếp các phương thức của nó.
TFile là lớp thao tác với file cực kì mạnh mẽ và hữu dụng, thay vì viết
var
F: TextFile;
s: string;
begin
AssignFile(F, 'abc.txt');
ReSet(F);
ReadLn(F, s);
CloseFile(F);
end.
Vừa dễ gây ra lỗi do không có cấu trúc bắt lỗi (thêm vào sẽ làm cho mã rối rắm hơn).
Thay vào đó, sử dụng đoạn code sau của TFile sẽ ngắn hơn và mã dễ đọc hơn rất nhiều
var
s: string;
begin
s := TFile.ReadAllText('abc.txt');
end.
Mẹo: Các bạn có thể sử dụng code insight để gợi ý danh sách các lệnh của TFile. Khi gõ xong TFile chấm (.) thì danh sách lệnh sẽ hiện ra.
Delphi cũng hỗ trợ thao tác với file theo cách thức tương tự như C++, nghĩa là xem file là một handle (Longint), mỗi file có một handle riêng, và có các chế độ mở file khác nhau.
Nhưng cách lập trình này trong delphi ít thông dụng vì khó nhớ và rắc rối. Các bạn có thể tự tìm hiểu thêm.
Delphi cũng cung cấp hai lớp TStreamWriter và TStreamReader (unit System.Classes) để sử dụng đọc ghi file theo kiểu stream.