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

การเข้าถึงไฟล์แบบสุ่ม (Random Access File) ในภาษา C

การเข้าถึงไฟล์แบบสุ่ม (Random Access) ในภาษา C ทำได้ด้วยฟังก์ชัน 3 ตัวหลัก:

  • ftell() - ดูตำแหน่งปัจจุบันของ File Pointer
  • rewind() - ย้าย File Pointer กลับไปต้นไฟล์
  • fseek() - ย้าย File Pointer ไปตำแหน่งที่ต้องการ

ftell()

คืนค่าตำแหน่งปัจจุบันของ File Pointer (เป็นจำนวนไบต์จากต้นไฟล์)

long ftell(FILE *fp);

ใช้นับจำนวนอักขระที่เขียนเข้าไฟล์ได้

rewind()

ย้าย File Pointer กลับไปจุดเริ่มต้นของไฟล์

void rewind(FILE *fp);

หลังจาก rewind() แล้ว ftell() จะคืนค่า 0 เสมอ

fseek()

ย้าย File Pointer ไปตำแหน่งที่กำหนด

int fseek(FILE *fp, long offset, int whence);

พารามิเตอร์

  • offset - จำนวนไบต์ที่จะเลื่อน (บวก = ไปหน้า, ลบ = ถอยหลัง)
  • whence (ตำแหน่งอ้างอิง):
    • SEEK_SET (0) - จากจุดเริ่มต้นไฟล์
    • SEEK_CUR (1) - จากตำแหน่งปัจจุบัน
    • SEEK_END (2) - จากจุดสิ้นสุดไฟล์

ตัวอย่างการใช้ fseek()

โค้ดความหมาย
fseek(fp, 0, SEEK_END)ไปท้ายไฟล์ (offset 0 จากท้าย)
fseek(fp, 0, SEEK_SET)ไปต้นไฟล์ (offset 0 จากต้น)
fseek(fp, m, SEEK_SET)ไปที่ไบต์ที่ m จากต้นไฟล์
fseek(fp, -m, SEEK_END)ถอยหลัง m ไบต์จากท้ายไฟล์

ข้อผิดพลาดที่พบบ่อย

  • fseek(fp, -m, SEEK_SET) - ไม่สามารถถอยหลังจากต้นไฟล์ได้
  • fseek(fp, +m, SEEK_END) - ไม่สามารถไปข้างหน้าจากท้ายไฟล์ได้

ตัวอย่างโปรแกรม

#include <stdio.h>

int main() {
    FILE *fp = fopen("data.txt", "r+");
    if(!fp) return 1;
    
    // ไปที่ไบต์ที่ 10 จากต้นไฟล์
    fseek(fp, 10, SEEK_SET);
    printf("Position: %ld\n", ftell(fp));
    
    // ไปท้ายไฟล์
    fseek(fp, 0, SEEK_END);
    printf("File size: %ld bytes\n", ftell(fp));
    
    // กลับต้นไฟล์
    rewind(fp);
    printf("After rewind: %ld\n", ftell(fp));
    
    fclose(fp);
    return 0;
}