5 การดำเนินการหลักกับไฟล์
- Naming - ตั้งชื่อไฟล์
- Opening - เปิดไฟล์ด้วย
fopen()
- Reading - อ่านข้อมูลด้วย
fgetc(), fgets(), fscanf(), fread()
- Writing - เขียนข้อมูลด้วย
fputc(), fputs(), fprintf(), fwrite()
- Closing - ปิดไฟล์ด้วย
fclose()
โหมดการเปิดไฟล์ (File Modes)
| Mode | คำอธิบาย |
r | เปิดเพื่ออ่าน (ต้องมีไฟล์อยู่แล้ว) |
w | เปิดเพื่อเขียน (สร้างใหม่/ทับไฟล์เดิม) |
a | เปิดเพื่อต่อท้าย (Append) |
r+ | เปิดอ่านและเขียน (ต้องมีไฟล์อยู่แล้ว) |
w+ | เปิดเขียนและอ่าน (สร้างใหม่/ทับไฟล์เดิม) |
a+ | เปิดต่อท้ายและอ่าน |
rb, wb, ab | โหมด Binary (สำหรับไฟล์รูปภาพ เสียง เป็นต้น) |
r+b, w+b, a+b | Binary + อ่าน/เขียน |
พฤติกรรมของแต่ละโหมด
| Mode | ไฟล์มีอยู่แล้ว | ไฟล์ไม่มีอยู่ |
r | อ่านได้ | คืนค่า NULL (Error) |
w | ลบเนื้อหาเดิม ทับใหม่ | สร้างไฟล์ใหม่ |
a | ต่อท้ายเนื้อหาเดิม | สร้างไฟล์ใหม่ |
ตัวอย่างโปรแกรม: คัดลอกไฟล์ (ซ้ำจากบทความก่อนแต่ครบถ้วนกว่า)
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fptr1, *fptr2;
char filename[100], ch;
printf("Enter filename to read: ");
scanf("%s", filename);
fptr1 = fopen(filename, "r");
if (!fptr1) { printf("Cannot open %s\n", filename); exit(1); }
printf("Enter filename to write: ");
scanf("%s", filename);
fptr2 = fopen(filename, "w");
if (!fptr2) { printf("Cannot open %s\n", filename); fclose(fptr1); exit(1); }
while ((ch = fgetc(fptr1)) != EOF)
fputc(ch, fptr2);
printf("Contents copied to %s\n", filename);
fclose(fptr1); fclose(fptr2);
return 0;
}
ฟังก์ชันอ่าน/เขียนเพิ่มเติม
fgets(str, n, fp) - อ่าน 1 บรรทัด (ปลอดภัยกว่า gets)
fputs(str, fp) - เขียนสตริง 1 บรรทัด
fprintf(fp, format, ...) - เขียนแบบจัดรูปแบบ (เหมือน printf)
fscanf(fp, format, ...) - อ่านแบบจัดรูปแบบ (เหมือน scanf)
fread(ptr, size, count, fp) - อ่านบล็อกข้อมูล (Binary)
fwrite(ptr, size, count, fp) - เขียนบล็อกข้อมูล (Binary)