Kiểu bản ghi và kiểu tập tin
9.2.5. Các thủ tục và hàm xử lí tập tin của Turbo Pascal
– Hàm FileSize(<FileVar>)
Cho số phần tử của tập tin <FileVar>. Hàm nhận giá trị 0 khi tập tin rỗng. – Hàm FilePos(<FileVar>)
Cho biết vị trí hiện tại của con trỏ (cửa sổ) trong tập tin <FileVar> (phần tử đầu tiên là phần tử số 0).
Một tập tin đã tồn tại chỉ có thể lớn lên bằng cách ghi thêm phần tử mới vào vị trí cuối cùng của tập tin. Muốn vậy, tr−ớc hết ta phải đ−a con trỏ tập tin vào vị trí cuối cùng của tập tin bằng lệnh sau:
Seek(<FileVar>, FileSize(<FileVar>)); – Thủ tục Erase(<FileVar>);
Xoá tập tin trên đĩa có tên ấn định với biến tập tin <FileVar>. – Thủ tục Rename(<FileVar>,<Str>);
trong đó<Str> là một hằng kí tự. Thủ tục này dùng thay đổi tên tập tin với tên mới kiểu string chứa trong chuỗi <Str>.
Chú ý
– Tên mới phải không trùng tên tập tin nào có sẵn trên đĩa đang làm việc. – Không đ−ợc đổi tên tập tin đang mở.
Ví dụ 15.
1. Dãy lệnh sau đây thực hiện việc xoá tập tin ở trong bộ nhớ ngoài, có tên đ−ợc nhập từ bàn phím :
Write(‘Cho biet tap tin can xoa:’); Readln(Ten_File);
Assign(F,Ten_File); Erase(F);
2. Muốn đổi tập tin có tên là File1.dat thành File2.dat ta cần viết cặp lệnh sau: Assign(F,’File1.dat’);
Rename(F,’File2.dat’);
Kiểm tra tập tin khi đang mở
Một số vấn để nảy sinh khi làm việc với tập tin: – Khi dùng Reset(F) liệu tập tin F đã tồn tại ch−a?
– Khi vào tập tin F thì liệu trên đĩa còn đủ chỗ để chứa thêm dữ liệu không ?
Turbo Pascal cung cấp lời h−ớng dẫn (Directive) cho ch−ơng trình dịch để đóng/mở việc kiểm tra lỗi trong quá trình vào ra tập tin.
. {$I+} : Mở việc kiểm tra. Khi gặp lỗi vào/ra, ch−ơng trình sẽ báo lỗi và dừng lại. Đây là chế độ mặc nhiên.
. {$I-} : Không kiểm tra lỗi vào/ra, ch−ơng trình không dừng lại nh−ng sẽ treo tất cả các thủ tục vào/ra khác cho đến khi lời gọi hàm có kết quả IOResult (có kiểu Integer), hàm IOResult=0 nếu mọi việc xảy ra tốt đẹp.
Ví dụ 16. Thủ tục sau đây thực hiện việc kiểm tra lỗi vào ra khi mở một tập tin mới: Procedure OpenInputFile;
Var OK : Boolean; Begin
Repeat
Write(‘Ten Tap Tin:’); Readln(TenFile); Assign(F,TenFile);
{$I-} {chuyen viec kiem tra cho nguoi dung} Reset(F);
OK:= IOResult=0; {$I+}
If Not OK Then Write(‘Khong the mo); Until OK;
End;