ประเภทของไฟล์ในภาษา C
มี 2 ประเภทหลัก:
- Text File (ไฟล์ข้อความ)
- Binary File (ไฟล์ไบนารี)
Text File (ไฟล์ข้อความ)
- ประกอบด้วยตัวอักษรและตัวเลขที่ **มนุษย์อ่านเข้าใจได้**
- หากมีข้อผิดพลาด สามารถแก้ไขได้ง่ายเพราะอ่านออกมาเป็นข้อความ
- เก็บข้อมูล **1 ตัวอักษรต่อ 1 ไบต์**
- ตัวอย่าง: เลข
4567ใช้ 2 ไบต์ในหน่วยความจำ แต่ใช้ **5 ไบต์** ใน Text File (4 ตัวเลข + newline/null) - รูปแบบข้อมูลมักเป็น **Line-oriented** (แต่ละบรรทัดคือคำสั่ง/ข้อมูลชุด)
- ตัวอย่าง:
.txt,.c,.h,.csv,.json,.xml
Binary File (ไฟล์ไบนารี)
- ประกอบด้วย **0 และ 1** ที่ **คอมพิวเตอร์เข้าใจได้โดยตรง**
- หากมีข้อผิดพลาด จะทำให้ไฟล์เสียหาย (Corrupt) และยากต่อการตรวจสอบ
- เก็บข้อมูล **เหมือนในหน่วยความจำ** เช่น
int4 ไบต์ ใน RAM ก็ 4 ไบต์ ในไฟล์ก็ 4 ไบต์ - ต้องมี **ซอฟต์แวร์ที่ตรงกัน** เพื่ออ่าน/เขียน (เช่น MP3 ต้องเล่นด้วย Music Player ไม่ใช่ Image Viewer)
- ตัวอย่าง:
.exe,.jpg,.mp3,.mp4,.pdf,.docx,.zip
การจัดประเภทเพิ่มเติม: การเข้าถึงข้อมูล
- Sequential Files (ไฟล์ลำดับ) - เข้าถึงข้อมูลตามลำดับ ต้องอ่านทีละเรคคอร์ด
- Random Access Files (ไฟล์เข้าถึงสุ่ม) - เข้าถึงข้อมูลที่ตำแหน่งใดก็ได้ทันที (ใช้
fseek())
ตารางเปรียบเทียบสรุป
| คุณสมบัติ | Text File | Binary File |
|---|---|---|
| อ่านโดยมนุษย์ | ได้ (Human-readable) | ไม่ได้ (Machine-readable) |
| ขนาดไฟล์ | ใหญ่กว่า (สำหรับตัวเลข) | เล็กกว่า (Compact) |
| ความเร็ว I/O | ช้ากว่า (ต้องแปลงรูปแบบ) | เร็วกว่า (Copy memory ตรงๆ) |
| Portability | สูง (ข้าม OS/Arch ได้) | ต่ำ (ขึ้นกับ Endianness, sizeof) |
| การแก้ไข Error | ง่าย | ยาก (Corrupt ได้ง่าย) |
| ฟังก์ชัน C | fprintf, fscanf, fgets, fputs | fread, fwrite |
ตัวอย่างการเปิดไฟล์
// Text file
FILE *fp = fopen("data.txt", "r"); // อ่านข้อความ
FILE *fp = fopen("data.txt", "w"); // เขียนข้อความ
// Binary file
FILE *fp = fopen("image.jpg", "rb"); // อ่านไบนารี
FILE *fp = fopen("data.bin", "wb"); // เขียนไบนารี