ข้อผิดพลาดที่พบบ่อยในการจัดการไฟล์:
- อ่านเกินขอบเขตไฟล์ (Read beyond EOF)
- อุปกรณ์เต็ม (Device overflow)
- พยายามเปิดไฟล์ที่ไม่ถูกต้อง
- เปิดไฟล์โหมดผิด (เช่นเปิดอ่านแต่เขียน)
ฟังก์ชันจัดการข้อผิดพลาด
ferror() - ตรวจสอบข้อผิดพลาด I/O
int ferror(FILE *fp);
คืนค่า 0 = ไม่มีข้อผิดพลาด, ค่าอื่น = มีข้อผิดพลาด
FILE *fp;
if(ferror(fp))
printf("Error occurred");
perror() - แสดงข้อความข้อผิดพลาด
void perror(const char *str);
แสดงข้อความ str ตามด้วย ":" และรายละเอียดข้อผิดพลาดของระบบ
FILE *fp;
char str[30] = "Error is";
perror(str);
// Output: Error is: No such file or directory
feof() - ตรวจสอบ End of File
int feof(FILE *fp);
คืนค่าค่าจริง (non-zero) ถ้าอ่านถึง EOF แล้ว
FILE *fp;
if(feof(fp))
printf("Reached end of file");
ตัวอย่างโปรแกรม: ใช้ ferror() และ perror()
#include <stdio.h>
int main() {
FILE *fp;
char str[30] = "error is";
int i = 20;
fp = fopen("sample.txt", "r"); // เปิดอ่านอย่างเดียว
if(fp == NULL) {
printf("File does not exist\n");
} else {
// พยายามเขียนในไฟล์ที่เปิดอ่านอย่างเดียว -> จะเกิด error
fprintf(fp, "%d", i);
if(ferror(fp)) {
perror(str);
printf("Error detected\n");
}
fclose(fp);
}
return 0;
}
ตัวอย่างโปรแกรม: ใช้ feof()
#include <stdio.h>
int main() {
FILE *fp;
int i, n;
// เขียนตัวเลข 0-100 ลงไฟล์
fp = fopen("number.txt", "w");
for(i = 0; i <= 100; i += 10)
putw(i, fp);
fclose(fp);
// อ่านกลับมา
fp = fopen("number.txt", "r");
printf("File content: ");
for(i = 0; i <= 100; i++) {
n = getw(fp);
if(feof(fp)) {
printf("\nReached end of file");
break;
}
printf("%d ", n);
}
fclose(fp);
return 0;
}
ผลลัพธ์
File content: 0 10 20 30 40 50 60 70 80 90 100 Reached end of file