ความสำคัญของไฟล์ในการเขียนโปรแกรม
ไฟล์คือที่เก็บข้อมูลถาวรบนฮาร์ดดิสก์ ภาษา C เข้าถึงไฟล์ได้หลากหลายวิธี
เหตุผลที่ต้องใช้ไฟล์
- ความถาวรของข้อมูล (Persistence) - ข้อมูลในตัวแปรหายเมื่อโปรแกรมจบ การเก็บในไฟล์ทำให้ข้อมูลคงอยู่
- ข้อมูลปริมาณมาก - ป้อนข้อมูลมากๆ ทางคีย์บอร์ดใช้เวลานาน ไฟล์ช่วยให้โหลดได้เร็ว
- การแลกเปลี่ยนข้อมูล - ย้ายข้อมูลระหว่างคอมพิวเตอร์ได้ง่าย ไม่ต้องป้อนใหม่
- การแบ่งปันข้อมูล - โปรแกรมหลายตัวสามารถอ่าน/เขียนไฟล์เดียวกันได้
การดำเนินการกับไฟล์ (ซ้ำเพื่อความครบ)
- Naming - ตั้งชื่อไฟล์
- Opening -
fopen() - Reading -
fgetc(),fscanf(),fread() - Writing -
fputc(),fprintf(),fwrite() - Closing -
fclose()
ไวยากรณ์พื้นฐาน
FILE *fp; // ประกาศ File Pointer
fp = fopen("filename", "r"); // เปิดไฟล์ (r=read, w=write, a=append)
int ch = fgetc(fp); // อ่าน 1 ตัวอักษร
fputc(ch, fp); // เขียน 1 ตัวอักษร
fclose(fp); // ปิดไฟล์
ตัวอย่างโปรแกรม: บันทึกและอ่านข้อมูลพนักงาน
#include <stdio.h>
int main() {
FILE *femp;
char empname[50];
int empnum;
float empsal;
// เขียนข้อมูลลงไฟล์
femp = fopen("Employee Details.txt", "w");
printf("Enter employee name: ");
scanf("%49s", empname); // ป้องกัน buffer overflow
printf("Enter employee number: ");
scanf("%d", &empnum);
printf("Enter employee salary: ");
scanf("%f", &empsal);
fprintf(femp, "%s\n%d\n%f\n", empname, empnum, empsal);
fclose(femp);
// อ่านข้อมูลจากไฟล์
femp = fopen("Employee Details.txt", "r");
fscanf(femp, "%s%d%f", empname, &empnum, &empsal);
printf("\n--- Employee Data ---\n");
printf("Name: %s\n", empname);
printf("Number: %d\n", empnum);
printf("Salary: %.2f\n", empsal);
fclose(femp);
return 0;
}
ผลลัพธ์:
Enter employee name: Pinky
Enter employee number: 20
Enter employee salary: 5000
--- Employee Data ---
Name: Pinky
Number: 20
Salary: 5000.00
ข้อแนะนำ Best Practices
- ตรวจสอบ
fp == NULLหลังfopen()ทุกครั้ง - ใช้
fgets()แทนgets()(ซึ่ง deprecated และอันตราย) - ปิดไฟล์ด้วย
fclose()เสมอ เพื่อ flush buffer และปล่อย resource - ใช้
"rb"/"wb"สำหรับ Binary เพื่อป้องกันปัญหา newline translation