Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ทำไมต้องใช้ไฟล์ (Files) ในภาษา C?


ความสำคัญของไฟล์ในการเขียนโปรแกรม

ไฟล์คือที่เก็บข้อมูลถาวรบนฮาร์ดดิสก์ ภาษา C เข้าถึงไฟล์ได้หลากหลายวิธี

เหตุผลที่ต้องใช้ไฟล์

  1. ความถาวรของข้อมูล (Persistence) - ข้อมูลในตัวแปรหายเมื่อโปรแกรมจบ การเก็บในไฟล์ทำให้ข้อมูลคงอยู่
  2. ข้อมูลปริมาณมาก - ป้อนข้อมูลมากๆ ทางคีย์บอร์ดใช้เวลานาน ไฟล์ช่วยให้โหลดได้เร็ว
  3. การแลกเปลี่ยนข้อมูล - ย้ายข้อมูลระหว่างคอมพิวเตอร์ได้ง่าย ไม่ต้องป้อนใหม่
  4. การแบ่งปันข้อมูล - โปรแกรมหลายตัวสามารถอ่าน/เขียนไฟล์เดียวกันได้

การดำเนินการกับไฟล์ (ซ้ำเพื่อความครบ)

  1. Naming - ตั้งชื่อไฟล์
  2. Opening - fopen()
  3. Reading - fgetc(), fscanf(), fread()
  4. Writing - fputc(), fprintf(), fwrite()
  5. 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