C Đọc tập tin
Đọc một tập tin
Trong chương trước, chúng ta đã ghi vào một tệp bằng cách sử dụng các chế độ w
và a
bên trong hàm fopen()
.
Để đọc từ một tập tin, bạn có thể sử dụng chế độ r
:
Ví dụ
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
Điều này sẽ làm cho filename.txt
được mở để đọc.
Cần phải thực hiện một chút thao tác để đọc một tệp ở C. Hãy cố gắng nhé! Chúng tôi sẽ hướng dẫn bạn từng bước.
Tiếp theo, chúng ta cần tạo một chuỗi đủ lớn để lưu trữ nội dung của tệp.
Ví dụ: hãy tạo một chuỗi có thể lưu trữ tối đa 100 ký tự:
Ví dụ
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
// Store the content of the file
char myString[100];
Để đọc nội dung của filename.txt
, chúng ta có thể sử dụng hàm fgets()
.
Hàm fgets()
có ba tham số:
Ví dụ
fgets(myString, 100,
fptr);
- Tham số đầu tiên chỉ định nơi lưu trữ nội dung tệp, nội dung này sẽ nằm trong mảng
myString
mà chúng ta vừa tạo. - Tham số thứ hai chỉ định kích thước tối đa của dữ liệu cần đọc, kích thước này phải khớp với kích thước của
myString
(100
). - Tham số thứ ba yêu cầu một con trỏ tệp được sử dụng để đọc tệp (
fptr
trong ví dụ của chúng tôi).
Bây giờ, chúng ta có thể in chuỗi sẽ xuất ra nội dung của tệp:
Ví dụ
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
// Store the content of the file
char myString[100];
// Read
the content and store it inside myString
fgets(myString, 100, fptr);
// Print the file content
printf("%s", myString);
// Close the
file
fclose(fptr);
Hello World!
Lưu ý: Hàm fgets
chỉ đọc dòng đầu tiên của file. Nếu bạn còn nhớ thì có hai dòng văn bản trong filename.txt
.
Để đọc từng dòng của tệp, bạn có thể sử dụng vòng lặp while
:
Ví dụ
FILE *fptr;
// Open a file in read mode
fptr =
fopen("filename.txt", "r");
// Store the content of the file
char
myString[100];
// Read the content and print it
while(fgets(myString, 100, fptr)) {
printf("%s", myString);
}
// Close the file
fclose(fptr);
Hello World!
Hi everybody!
Thực hành tốt
Nếu bạn cố mở một tệp không tồn tại để đọc, hàm fopen()
sẽ trả về NULL
.
Mẹo: Theo một cách hay, chúng ta có thể sử dụng câu lệnh if
để kiểm tra NULL
và thay vào đó in một số văn bản (khi tệp không tồn tại):
Ví dụ
FILE *fptr;
// Open a file in read mode
fptr =
fopen("loremipsum.txt", "r");
// Print some text
if the file does not exist
if(fptr == NULL) {
printf("Not able to open the
file.");
}
// Close the file
fclose(fptr);
Nếu tệp không tồn tại, văn bản sau sẽ được in:
Not able to open the file.
Với suy nghĩ này, chúng ta có thể tạo mã bền vững hơn nếu sử dụng lại ví dụ "đọc tệp" ở trên:
Ví dụ
Nếu tệp tồn tại, hãy đọc nội dung và in nó. Nếu tệp không tồn tại, hãy in thông báo:
FILE *fptr;
// Open a file in read mode
fptr =
fopen("filename.txt", "r");
// Store the content of the file
char
myString[100];
// If the file exist
if(fptr != NULL) {
// Read the content and print it
while(fgets(myString, 100, fptr))
{
printf("%s", myString);
}
//
If the file does not exist
} else {
printf("Not able to open the file.");
}
// Close the file
fclose(fptr);
Hello World!
Hi everybody!