การดำเนินการกับไฟล์ (File Operations)
ไฟล์คือที่เก็บข้อมูลถาวรบนฮาร์ดดิสก์ ภาษา C จัดการไฟล์ได้ผ่านขั้นตอน:
- ตั้งชื่อไฟล์ (Naming)
- เปิดไฟล์ (Opening)
- อ่านจากไฟล์ (Reading)
- เขียนลงไฟล์ (Writing)
- ปิดไฟล์ (Closing)
ไวยากรณ์สำคัญ
| การทำงาน | ไวยากรณ์ | ตัวอย่าง |
|---|---|---|
| ประกาศ File Pointer | FILE *fp; | FILE *fptr; |
| เปิดไฟล์ | fp = fopen("filename", "mode"); | fptr = fopen("sample.txt", "r"); |
| อ่าน 1 ตัวอักษร | fgetc(fp) | ch = fgetc(fptr); |
| เขียน 1 ตัวอักษร | fputc(ch, fp) | fputc(ch, fptr); |
โปรแกรมคัดลอกไฟล์สมบูรณ์
#include <stdio.h>
#include <stdlib.h> // สำหรับ exit()
int main() {
FILE *fptr1, *fptr2;
char filename[100], ch;
// เปิดไฟล์ต้นทางอ่าน
printf("Enter source filename: ");
scanf("%s", filename);
fptr1 = fopen(filename, "r");
if (fptr1 == NULL) {
printf("Cannot open file %s\n", filename);
exit(1);
}
// เปิดไฟล์ปลายทางเขียน
printf("Enter destination filename: ");
scanf("%s", filename);
fptr2 = fopen(filename, "w");
if (fptr2 == NULL) {
printf("Cannot open file %s\n", filename);
fclose(fptr1);
exit(1);
}
// คัดลอกทีละตัวอักษร
ch = fgetc(fptr1);
while (ch != EOF) {
fputc(ch, fptr2);
ch = fgetc(fptr1);
}
printf("\nContents copied to %s", filename);
fclose(fptr1);
fclose(fptr2);
return 0;
}
ผลลัพธ์ตัวอย่าง:
Enter source filename: file3.txt
Enter destination filename: file1.txt
Contents copied to file1.txt
ข้อสังเกตสำคัญ
- ตรวจสอบ
NULLหลังfopen()เสมอ - ปิดไฟล์ด้วย
fclose()ทุกครั้ง - โหมด
"w"จะลบเนื้อหาเดิมทิ้ง หากต้องการต่อท้ายใช้"a" - สำหรับไฟล์ไบนารี ใช้
"rb"และ"wb"แทน