Tải bản đầy đủ (.docx) (2 trang)

Chương 7 Các dòng tập tin (Stream) Xử lý lỗi

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (57.28 KB, 2 trang )

. Xử lý lỗi
Khi làm việc với tệp không phải mọi việc đều trôi chẩy mà thường xẩy ra nhiều điều trục
trặc, chẳng hạn:
1. Mở một tệp để đọc nhưng tệp không tồn tại.
2. Đọc dữ liệu nhưng con trỏ tệp đã ở cuối tệp
3. Ghi dữ liệu nhưng hết không gian đĩa (đĩa đầy).
4. Tạo tệp nhưng đia hỏng, hoặc đĩa cấm ghi hoặc đĩa đầy.
5. Dùng tên tệp không hợp lệ
6. Định thực hiện một thao tác nhưng tệp lại không được mở ở mode phù hợp để thực hiện
thao tác đó.
Tóm lại khi làm việc với tệp thường gặp nhiều lỗi khác nhau, nếu không biết cách phát hiện
xử lý thì chương trình sẽ dẫn đến rối loạn hoặc cho kết quả sai. Trong lớp ios của C++ có nhiều
phương thức cho phép phát hiện lỗi khi làm việc với tệp. Đó là:
1. Phương thức
int eof() ;
Nếu con trỏ tệp đã ở cuối tệp mà lại thực hiện một lệnh đọc dữ liệu thì phương thức eof() trả
về giá trị khác không, trái lại phương thức có giá trị bằng 0.
2. Phương thức
int fail() ;
Phương thức fail() trả về giá trị khác không nếu lần nhập xuất cuối cùng có lỗi, trái lại
phương thức có giá trị bằng 0.
3. Phương thức
int bad() ;
Phương thức bad() trả về giá trị khác không khi một phép nhập xuất không hợp lệ hoặc có
lỗi mà chưa phát hiện được, trái lại phương thức có giá trị bằng 0.
4. Phương thức
int good() ;
Phương thức good() trả về giá trị khác không nếu mọi việc đều tốt đẹp ( không có lỗi nào
xẩy ra). Khi có một lỗi nào đó thì phương thức có giá trị bằng 0.
5. Phương thức
void clear() ;


dùng để tắt tất cả các bit lỗi.
Ví dụ 1. Khi mở tệp để đọc cần kiểm tra xem tệp có tồn tại không. Để làm điều đó, chúng ta
có thể dùng đoạn chương sau:
char ten_tep[40] ;
cout << “\n Cho biết tên tệp: “ ;
cin >> ten_tep ;
ifstream f(ten_tep);
if (f.bad())
{
426
cout << “\n Tệp << ten_tep << “không tồn tại” ;
exit(1) ;
}
Ví dụ 2. Khi tạo tệp mới để ghi cần kiểm tra xem có tạo được tệp hay không. Để làm điều
đó, chúng ta có thể dùng đoạn chương sau:
char ten_tep[40] ;
cout << “\n Cho biết tên tệp: “ ;
cin >> ten_tep ;
ofstream f(ten_tep);
if (f.bad())
{
cout << “\n Không tạo được tệp << ten_tep ;
exit(1) ;
}
Ví dụ 3. Để xác định độ dài của tệp, có thể dùng phương thức eof() và thuật toán sau:
+ Đọc một byte (chú ý phải đọc theo kiểu nhị phân)
+ Nếu việc đọc thành công ( eof()=0 ) thì cộng thêm một vào bộ đếm. Nếu việc đọc không
thành ( eof() != 0 ) thì kết thúc vùng lặp.
Thuật toán trên được thể hiện bằng đoạn chương trình sau:
ifstream f(ten_tep, ios::in | ios::binary) ;

long dem = 0 ; char ch;
while (1)
{
f.get(ch) ;
if (!eof()) dem++ ;
else break;
}

×