บทที่ 12 ไฟล์

สพฐ 1untitled-41 e0b89ee0b8a3e0b8b0e0b981e0b8aae0b887e0b8a7e0b8b4e0b897e0b8a2e0b8b21 google

ไฟล์(File)คือ ที่เก็บข้อมูลต่าง ๆ ของคอมพิวเตอร์ และในภาษา C นั้นไฟล์ก็จะมีความหมายรวมไปถึงอุปกรณ์ต่างที่ต่อกับเครื่องคอมพิวเตอร์ด้วย เข่น คีย์บอร์ด จอภาพ
การติดต่อกับไฟล์จะต้องผ่านลิจิกคอลอินเตอร์เฟส (Logical Interfaces) ที่เรียกว่าสตรีม (Stream) สตรีมจะช่วยให้ผู้ใช้เขียนโปรแกรมติดต่อกับอุปกรณ์ต่าง ๆ ได้ ซึ่งสตรีมที่ใช้ติดต่อกับไฟล์ ไฟล์จะมีอยู่ 2 ประเภทคือ
Text file เป็นไฟล์ของตัวอักษร เพราะมีโครงสร้างในการเก็บข้อมูลจะเป็นตัวอักษรไฟล์นั้นจึงไม่สามารถที่จะเก็บข้อมูลที่ค่าตัวเลขจำนวนเต็ม จุดทศนิยม หรือในลักษณะที่เป็นโครงสร้างซึ่งการเก็บ ข้อมูลจะถูกแปลงเป็นเลขฐานสองตามรหัส ASDII
Binary File เป็นไฟล์ที่เก็บข้อมูลที่อยู่ในรูปแบบของค่าตรง ๆ ซึ่งข้อมูลที่ไฟล์ประเภทนี้จัดเก็บ จะสามารถเป็นได้ทั้งตัวเลขจำนวนเต็ม ตัวเลขทศนิยม ตัวอักษร อาร์เรย์ และข้อมูลแบบโครงสร้าง โดยการจัดเก็บนั้นจะเก็บลงไปตรง ๆ เลย
File Table ก่อนที่ใช้ไฟล์ได้ผู้ใช้จะต้องรู้จักกับ File Table ซึ่ง File Table คือ ส่วนของหน่วยความจำที่เก็บข้อมูลต่าง ๆที่เกี่ยวกับไฟล์
Text File ฟังก์ชันที่เกี่ยวกับไฟล์นั่นจะใช้ไลบรารีไฟล์ stdio.h ซึ่งเป็นไลบารีไฟล์มาตรฐานที่ต้องใช้อยู่เสมอ จึงไม่จำเป็นต้องนำเข้าไลบรารีไฟล์อื่นๆ อีก
การเปิดไฟล์ ฟังก์ชั่นในการเปิดไฟล์ คือ ฟังก์ชัน fopen ฟังก์ชันนี้ต้องการพารามิเตอร์ 2ตัว ตัวแรกคือชื่อไฟล์ที่ต้องการจะเปิด ซึ่งอาจจะรวมที่อยู่ของไฟล์ (Path) ในกรณีที่ไฟล์ที่ต้องการใช้ไม่ได้อยู่ที่เดียวกันกับไฟล์โปรแกรม และตัวที่ 2 จะเป็นโหมดในการเปิดซึ่งจะมีโหมดการเปิดอยู่ 3โหมดดังที่แสดง

โหมด

ความหมาย

r

เปิดไฟล์ขึ้นมาเพื่ออ่าน
– ถ้าเปิดสำเร็จ ไฟล์พอยเตอร์จะชี้ไปที่ต้นไฟล์
– ถ้าเปิดไม่ได้ จะส่งค่ากลับเป็นค่า Error (Null)

w

เปิดไฟล์ขึ้นมาเพื่อเขียน

  1. ถ้าเปิดสำเร็จ จะได้ไฟล์ว่าง ๆ
  2. ถ้าเปิดไม่ได้ จะสร้างไฟล์ที่ต้องการให้ใหม่
a เปิดไฟล์ขึ้นมาเพื่อเขียนต่อ

  1. ถ้าเปิดสำเร็จ ไฟล์พอยเตอร์จะชี้ไปที่ปลายไฟล์
  2. ถ้าเปิดไม่ได้ จะสร้างไฟล์ที่ต้องการให้ใหม่

ชื่อไฟล์ คือ สตริงที่เป็นชื่อของไฟล์ ซึ่งอาจจะรวมกับที่อยู่ของไฟล์ (Pull) ด้วย ซึ่งไฟล์ที่ใช้จะนามสกุล .dat
การปิดไฟล์ เมื่อเปิดใช้ไฟล์แล้วใช้เสร็จ ก็ควรจะทำการปิดไฟล์ที่ใช้ด้วย ซึ่งฟังก์ชันที่ใช้ปิดไฟล์ คือ ฟังก์ชัน fclose ซึ่งมีรูปแบดังนี้
Fclose ( [ ชื่อไฟล์พอยเตอร์ ] );
ในการเปิดไฟล์และปิดไฟล์นั้นอาจจะเกิดการผิดพลาดขึ้นได้ จนทำให้การเปิดและปิดไฟล์ไม่สมบรูณ์ ถ้าเปิดไฟล์ไม่สำเร็จ ฟังก์ชั่น fopen จะส่งค่ากลับมาเป็นค่า Null และถ้าการปิดไฟล์ไม่สำเร็จจะส่งค่ากลับเป็น EOF ซึ่งจากตรงนี้ทำให้สามารถเขียนโปรแกรมเพื่อตรวจสอบการเปิดและปิดไฟล์ เพื่อป้องกันไม่ให้การทำงานของโปรแกรมผิดพลาด ดังแสดงในโปรแกรม 12-1

การอ่านและเขียนไฟล์
ฟังก์ชันในอ่านและเขียนไฟล์นั้น คือ ฟังก์ชัน fscanf และ fprintf ตามลำดับ fscanf เป็นฟังก์ชันในการอ่านข้อมูลจากไฟล์ ซึ่งการทำงานก็เหมือนกับฟังก์ชัน scan แต่จะต่างกันตรงที่ฟังก์ชัน fscanf จะต้องใช้ไฟล์พอยเตอร์เพื่อชี้ตำแหน่งที่จะอ่านจากไฟล์มีรูปแบบดังนี้
Fscanf ( [ชื่อไฟล์พอยเตอร์ ] , “[ รูปแบบข้อความ ]” , [ที่อยู่ของตัวแปร]);
ในการอ่านข้อมูลนั้น ผู้ใช้ต้องรู้อยู่แล้วว่าข้อมูลที่จะไปอ่าน เก็บอยู่ในลักษณะอย่างไรแล้วจึงเขียนรูปแบบข้อความตามนั้น เช่น
5-10-1936
ชุดคำสั่งการอ่านจะเป็นดังนี้
fscanf( fpData, “%d-%d-%d”, &month, &day, &year);
Fprintf เป็นฟังก์ชันในการเขียนข้อมูลลงไปในไฟล์ ซึ่งการทำงานก็เหมือนกับฟังก์ชัน printf แต่จะใช้ไฟล์พอยเตอร์เป็นตัวชี้ตำแหน่งของไฟล์ที่จะเขียนข้อมูลลงไป เช่น
fprintf (fpOurt , “%d\n%d\n%d”, i , j , k);
เมื่อคำสั่งนี้ทำงานค่าที่เก็บในไฟล์จะเป็นดังนี้
100
200
300

โปรแกรมตรวจสอบการเปิดและปิดไฟล์ที่ 12-1

 122

โปรแกรมการอ่านข้อมูล 12-2

123
โปรแกรมการคัดลอกข้อมูล 12-3

 124

โปรแกรมเขียนข้อมูลลงไฟล์ 12-4

125
ฟังก์ชันการอ่านและเขียนข้อมูลที่เป็นตัวอักษร

Getc และ fgetc ทั้งสองฟังก์ชันนี้จะมีการทำงาน คือ จะอ่านตัวอักษรตัวต่อไปจากไฟล์ขึ้นมาเลย และถ้าอ่านไปจนจบไฟล์ ทั้งสองก็จะส่งค่ากลับเป็น EOF ซึ่งตัวอย่างในการใช้ได้แสดงหน้าถัดไป
nextChar = getc(fpMyFile);
nextChar = fgetc(fpMyFile);
putc และ fputtc ทั้งสองฟังก์ชันนี้จะมีการทำงาน คือ จะเขียนข้อมูลลงไปในไฟล์ที่ละ 1 ตัวอักษร ถ้าการเขียนข้อมูลสมบรูณ์จะส่งค่ากลับมาเป็นตัวอักษรที่ส่งไป แต่ถ้าไม่สมบรูณ์จะส่งค่ากลับเป็น EOF ซึ่งตัวอย่างการใช้ทั่งสองฟังก์ชัน
putc(oneChar , fpMyFile);
fputc (oneChar , fpMyFile);

โปรแกรมสร้าง Text File 12-5

125

Binary File เมื่อสังเกตดี ๆ จะมีเก็บข้อมูลเหมือนการเก็บข้อมูลเป็นเรคคอร์ด ซึ่งทำให้การอ่าน-เขียนนั้นกระทำได้ค่อนข้างที่จะง่ายกว่า Text File
การเปิดไฟล์และปิดไฟล์
ในการเปิดปิดไฟล์ Binary File นั้นจะเหมือนกับ Text File เลยแต่สิ่งที่ต่างกันจะอยู่ตรงที่โหมดในการเปิดไฟล์ ซึ่งโหมดในการเปิด Binary File

โหมด

ความหมาย

rb

เปิดไฟล์ขึ้นมาเพื่ออ่าน

  1. ถ้าเปิดสำเร็จ ไฟล์พอยเตอร์จะชี้ไปที่ต้นไฟล์
  2. ถ้าเปิดไม่ได้ จะส่งค่ากลับเป็นค่า Error (NuII)

wb

เปิดไฟล์ขึ้นมาเพื่อเขียน

  1. ถ้าเปิดสำเร็จ จะได้ไฟล์ว่าง ๆ
  2. ถ้าเปิดไม่ได้ จะสร้างไฟล์ที่ต้องการให้ใหม่

ab

เปิดไฟล์ขึ้นมาเพื่อเขียนต่อ

  1. ถ้าเปิดสำเร็จ ไฟล์พอยเตอร์จะชี้ไปที่ปลายไฟล์
  2. ถ้าเปิดไม่ได้ จะสร้างไฟล์ที่ต้องการให้ใหม่

การอ่านและเขียนไฟล์
ฟังก์ชันในการอ่านและเขียนไฟล์นั้น คือ ฟังก์ชัน fread และ fwrite ตามลำดับ
fread เป็นฟังก์ชันในการอ่านข้อมูลจากไฟล์ รูปแบบดังนี้
fread([ ชื่อตัวแปร] , [ขนาดของตัวแปร] , [ จำนวน ] , [ชื่อไฟล์พอยเตอร์]);
ในการอ่านข้อมูลจาก Binary File จะต้องกำหนดขนาดของข้อมูลและจำนวนที่อ่านขึ้นมาเพราะอย่างที่ได้กล่าวไปในข้างต้นแล้ว Binary File จะเก็บข้อมูลในลักษณะรูปแบบทางคอมพิวเตอร์เพราะฉะนั้นผู้ใช้จะต้องการอ่านข้อมูลที่ตัวเลขจำนวนเต็ม 1 ตัว ซึ่งตัวเลขจำนวนเต็มจะใช้พื้นที่ 2 ไบต์และขนาดที่กำหนดคือ 2 เพื่อให้การอ่านข้อมูลแล้วสามารถเก็บในตัวแปรได้ถูกต้อง

โปรแกรมการอ่านข้อมูลจากไฟล์ 12-6

126

โปรแกรมการอ่านข้อมูลแบบโครงสร้าง 12-7

127
fwrite เป็นฟังก์ชันในการเขียนข้อมูลลงไฟล์ มีรูปดังนี้
fwrite([ชื่อตัวแปร] , [ขนาดของตัวแปร] , [จำนวน] , [ชื่อไฟล์พอยเตอร์]);
ฟังก์ชันนี้จะคล้ายกับฟังก์ชัน fread แต่ทำเป็นการเขียนแทน โดยสิ่งที่ต้องการก็เหมือนกัน แสดงในตัวอย่าง
fwrite(num , sixeof (int), 1, fpData);

โปรแกรมในการเขียนข้อมูลแบบโครงสร้าง 12-8

128

ฟังก์ชันบอกสถานะของไฟล์
Feof เป็นฟังก์ชันที่จะบอกว่าขณะนี้ ไฟล์พอยเตอร์ไปอยู่ตำแหน่งสิ้นสุดไฟล์หรือยังซึ่งจะส่งค่ากลับมาเป็น 0 เมื่อสิ้นสุดไฟล์แล้วและจะส่งค่ากลับมาเป็น ไม่เท่ากับ 0 เมื่อยังไม่สิ้นสุดไฟล์ การใช้แสดงตัวอย่าง
sts = ferror(fpData);
ฟังก์ชันตำแหน่งของไฟล์พอยเตอร์
Rewind จะเป็นฟังก์ชันในการย้ายตำแหน่งของไฟล์พอยเตอร์ให้ไปอยู่ที่หัวไฟล์ ซึ่งการใช้คำสั่งนี้แสดงตัวอย่าง
Rewind(fpData);
Ftell เป็นฟังก์ชันที่จะส่งค่ากลับ เป็นตำแหน่งที่อยู่ของไฟล์พอยเตอร์ในขณะนั้นซึ่งค่าที่ส่งกลับมาเป็นข้อมูลชนิด long int

ฟังก์ชันของระบบ
Remove เป็นฟังก์ชันที่ใช้ลบไฟล์ที่ต้องการทิ้งไป ถ้าการลบสมบรูณ์จะส่งค่ากลับมาเป็น () และถ้าไม่สมบรูณ์จะส่งค่ากลับเป็น ไม่เท่ากับ 0
If(remove(“file1.dat))
Printf(“Error, file cannot be deleted”);
Rename เป็นฟังก์ชันที่จะใช้เปลี่ยนชื่อไฟล์ที่ต้องการ ถ้าการเปลี่ยนสมบรูณ์จะส่งค่ากลับมาเป็น 0 และถ้าไม่สมบรูณ์จะส่งค่ากลับเป็น ไม่เท่ากับ 0
If(rename(“file10dat” , “file1.bak))
Printf(“Error, the file cannot be rename”);

โปรแกรมเก็บข้อมูลนักเรียน 12-9

 129

เนื้อหาเพิ่มเติม

บทที่ 12 ไฟล์ (File)
Text File คือ ไฟล์ที่เก็บข้อมูลเป็นตัวอักษร
การประกาศตัวแปรใช้ชี้ไปยังไฟล์มีรูปแบบ ดังนี้
FILE *<ชื่อไฟล์พอยเตอร์>
เช่น
FILE *fpTempData; //ประกาศตัวแปรพอยเตอร์ชื่อว่า fpTempData ให้ชี้ไปยังไฟล์
การเปิดไฟล์ (สำหรับ Text File มี 3 โหมด ดังนี้)
r : เปิดเพื่ออ่าน
w : เปิดเพื่อเขียน
ถ้ามีไฟล์เดิมอยู่แล้ว จะถูกทับด้วยไฟล์ใหม่
ถ้าไม่มีไฟล์เดิมอยู่ก็จะสร้างไฟล์ใหม่ให้
a : เปิดไฟล์ขึ้นมาเพื่อเขียนต่อ
ถ้ามีไฟล์เดิมอยู่แล้ว ก็จะไปชี้ที่ท้ายไฟล์เดิมเพื่อรอให้เขียนต่อเลย
ถ้าไม่มีไฟล์เดิมอยู่ก็จะสร้างไฟล์ใหม่มาให้
มีรูปแบบการเปิดไฟล์ ดังนี้
<ชื่อไฟล์พอยเตอร์> = fopen(<“[ตำแหน่งที่ตั้ง\]ชื่อไฟล์”>,<“โหมดที่ต้องการเปิด”>);
เช่น
fpTempData = fopen(“c:\\test.dat”,”r”);มีรูปแบบการปิดไฟล์ ดังนี้
fclose(<ชื่อไฟล์พอยเตอร์>) ;
เช่น
fclose(fpTempData) ;
การอ่านข้อมูลจากไฟล์ขึ้นมาใช้งาน มีรูปแบบ ดังนี้
fscanf(<ชื่อไฟล์พอยเตอร์>,”<รูปแบบข้อความ>”,&<ชื่อตัวแปรที่ใช้รับค่า>,…);
เช่น
fscanf(fpTempData,”%d-%d-%d”,&m,&d,&y);
การเขียนข้อมูล / บันทึกข้อมูลลงสู่ไฟล์ มีรูปแบบ ดังนี้
fprintf(<ชื่อไฟล์พอยเตอร์>,”<รูปแบบข้อความ>”,<ชื่อตัวแปรที่จะนำค่าลงไปเก็บ>,…)
เช่น
fprintf(fpTempData,”%d-%d-%d”,m,d,y)
ฟังก์ชั่นที่ใช้ในการอ่าน หรือ เขียน ตัวอักษร
getc และ fgetc จะใช้อ่านตัวอักษรตัวต่อไปจากไฟล์ขึ้นมาใช้งาน เช่น
nextChar = getc(fpTempData); หรือ
nextChar = fgetc(fpTempData);
…………………………………………………………..Binary File คือ ไฟล์ที่เก็บข้อมูลในรูปของเลขฐานสอง
การประกาศตัวแปรใช้ชี้ไปยังไฟล์มีรูปแบบ ดังนี้
FILE *<ชื่อไฟล์พอยเตอร์>
เช่น
FILE *fpTempData; //ประกาศตัวแปรพอยเตอร์ชื่อว่า fpTempData ให้ชี้ไปยังไฟล์
การเปิดไฟล์ (สำหรับ Text File มี 3 โหมด ดังนี้)
rb : เปิดเพื่ออ่าน
wb : เปิดเพื่อเขียน
ถ้ามีไฟล์เดิมอยู่แล้ว จะถูกทับด้วยไฟล์ใหม่
ถ้าไม่มีไฟล์เดิมอยู่ก็จะสร้างไฟล์ใหม่ให้
ab : เปิดไฟล์ขึ้นมาเพื่อเขียนต่อ
ถ้ามีไฟล์เดิมอยู่แล้ว ก็จะไปชี้ที่ท้ายไฟล์เดิมเพื่อรอให้เขียนต่อเลย
ถ้าไม่มีไฟล์เดิมอยู่ก็จะสร้างไฟล์ใหม่มาให้
มีรูปแบบการเปิดไฟล์ ดังนี้
<ชื่อไฟล์พอยเตอร์> = fopen(<“[ตำแหน่งที่ตั้ง\]ชื่อไฟล์”>,<“โหมดที่ต้องการเปิด”>);
เช่น
fpTempData = fopen(“c:\\test.dat”,”rb”);มีรูปแบบการปิดไฟล์ ดังนี้
fclose(<ชื่อไฟล์พอยเตอร์>) ;
เช่น
fclose(fpTempData) ;
การอ่านข้อมูลจากไฟล์ขึ้นมาใช้งาน มีรูปแบบ ดังนี้
fread(<ชื่อตัวแปรที่ใช้รับค่า>,”<ขนาดของตัวแปร>,<จำนวน>,<ชื่อไฟล์พอยเตอร์>);
เช่น
fread(num,sizeof(int),1,fpTempData);
การเขียนข้อมูล / บันทึกข้อมูลลงสู่ไฟล์ มีรูปแบบ ดังนี้
fwrite(<ชื่อตัวแปรที่ใช้รับค่า>,”<ขนาดของตัวแปร>,<จำนวน>,<ชื่อไฟล์พอยเตอร์>);
เช่น
fwrite(num,sizeof(int),1,fpTempData);
ฟังก์ชั่นที่ใช้ในการจัดการไฟล์
feof(<ชื่อไฟล์พอยเตอร์>); ตรวจสอบจุดสิ้นสุดของไฟล์
เช่น
feof(fpTempData);
// สิ้นสุดไฟล์แล้วผลลัพธ์ที่ได้จะเป็น 0
// ถ้ายังไม่สิ้นสุดไฟล์ผลลัพธ์ที่ได้จะไม่เท่ากับ 0
ferror(<ชื่อไฟล์พอยเตอร์>); ตรวจสอบข้อผิดพลาดในขณะที่อ่านหรือเขียน
เช่น
ferror(fpTempData);
// ไม่มีข้อผิดพลาดผลลัพธ์ที่ได้จะเป็น 0
// ถ้ามีข้อผิดพลาดผลลัพธ์ที่ได้จะไม่เท่ากับ 0
rewind(<ชื่อไฟล์พอยเตอร์>); ย้ายตำแหน่งตัวแปรพอยเตอร์ให้ไปชี้ที่ต้นไฟล์
เช่น
rewind(fpTempData);
ftell(<ชื่อไฟล์พอยเตอร์>); ส่งค่ากลับมาเป็นที่อยู่ของตัวแปรไฟล์พอยเตอร์ปัจจุบันมาให้
เช่น
ftell(fpTempData); // จะส่งที่อยู่ของ fpTempData มาให้
remove(<ชื่อไฟล์>); ใช้สำหรับลบไฟล์ออกจากสื่อบันทึกข้อมูล
เช่น
remove(“c:\\test.dat”);
rename(<ชื่อไฟล์ต้นฉบับ>”,”<ชื่อไฟล์ใหม่>”); ใช้สำหรับเปลี่ยนชื่อไฟล์
เช่น
rename(“c:\\test.dat”,”c:\\abc.txt”);
// ก็จะทำการเปลี่ยนชื่อไฟล์ใน Drive c:\จากชื่อ Test.dat เป็น abc.txt

ใส่ความเห็น