9.7 การใช้ฟังก์ชัน fwrite( ) และ fread( )
การใช้ฟังก์ชัน fwrite( ) และ fread( ) ใช้ได้กับ binary file เท่านั้น
9.7.1 ฟังก์ชัน fwrite( )
ฟังก์ชัน fwrite( ) เป็นฟังก์ชันที่ใช้เก็บข้อมูล ลงแฟ้มโดยที่การเก็บข้อมูลแต่ละครั้ง สามารถกำหนดขนาดของข้อมูลที่ต้องการบันทึกได้
รูปแบบการใช้
การใช้ฟังก์ชัน fwrite( ) และ fread( ) ใช้ได้กับ binary file เท่านั้น
9.7.1 ฟังก์ชัน fwrite( )
ฟังก์ชัน fwrite( ) เป็นฟังก์ชันที่ใช้เก็บข้อมูล ลงแฟ้มโดยที่การเก็บข้อมูลแต่ละครั้ง สามารถกำหนดขนาดของข้อมูลที่ต้องการบันทึกได้
รูปแบบการใช้
fwrite(&var, size, n, fp);
โดยที่
&var คือ ตำแหน่งของตัวแปรที่เก็บข้อมูลที่ต้องการนำไปเก็บไว้ในแฟ้ม
size คือ ขนาดของข้อมูลที่ต้องการ write ลงแฟ้มในแต่ละครั้ง ซึ่งสามารถหาได้จากฟังก์ชัน sizeof(data type); หรือ sizeof(variable name); เช่น sizeof(int); หรือ sizeof(j);
n คือ จำนวนครั้งที่ต้องการ write ข้อมูลลงแฟ้ม
fp คือ ตัวชี้ตำแหน่งข้อมูลในแฟ้ม (file pointer)
ข้อควรจำ ฟังก์ชัน fwrite( ) จะให้ค่าเลขจำนวนเต็มเท่ากับ n (จำนวนครั้งที่ write ข้อมูลลงแฟ้ม) เมื่อไม่เกิดข้อผิดพลาดในการเขียนข้อมูล และจะให้ค่าน้อยกว่า n เมื่อมีข้อผิดพลาดเกิดขึ้น
ตัวอย่างที่ 9.6 แสดการใช้ฟังก์ชัน fwrite( )
เช่น 1)
FILE *fptr;
double x=1.2345678912345;
fwrite(&x,sizeof(double x),1,fptr);
เป็นการบันทึกข้อมูลที่เก็บไว้ในตัวแปร x ลงแฟ้มข้อมูล โดยทำการบันทึก 1 ครั้ง (n=1) ขนาดของข้อมูลที่บันทึกลงแฟ้มในแต่ละครั้งมีขนาด 8 bytes ตามชนิดตัวแปร x
2)
FILE *fptr; int j;
int a[10]={10,20,30,40,50,60,70,80,90,100};
for (j=0;j<10;j++)
fwrite(&a[j],sizeof(int a[j]),1,fptr);
เป็นการบันทึกข้อมูลที่เก็บไว้ในตัวแปรชุด a ลงแฟ้มข้อมูล โดยใช้คำสั่ง for มาช่วยทำการบันทึกข้อมูลลงแฟ้ม 10 ครั้ง โดยที่ขนาดของข้อมูลที่บันทึกลงแฟ้มในแต่ละครั้งมีขนาด 2 bytes ตามชนิดของตัวแปร a[j]
เพื่อความเข้าใจเกี่ยวกับการใช้ฟังก์ชัน fwrite( ) มากขึ้น ให้ศึกษาโปรแกรมตัวอย่างดังต่อไปนี้
เพื่อความเข้าใจเกี่ยวกับการใช้ฟังก์ชัน fwrite( ) มากขึ้น ให้ศึกษาโปรแกรมตัวอย่างดังต่อไปนี้
โปรแกรมตัวอย่างที่ 9.7 แสดงการใช้งานฟังก์ชัน fwrite( ) เก็บข้อมูลลงแฟ้ม และสามารถกำหนดขนาดของข้อมูลที่ต้องการบันทึกได้
![]() | ![]() | ![]() | ![]() | |
/* wdataf3.c */ | ||||
![]() | ![]() |
ผลลัพธ์ที่ได้จากโปรแกรม

คำแนะนำ เราค่อยตรวจสอบต่อไปว่าสามารถเขียนข้อมูลลงแฟ้มได้จริงหรือไม่ ในโปรแกรมตัวอย่างที่ 9.8
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 9.7 จะให้ผู้ใช้เติมข้อมูลเพื่อเก็บข้อมูลลงในแฟ้มข้อมูล ซึ่งสามารถเติมข้อมูลได้มากกว่า 1 record โดยผู้ใช้เป็นคนกำหนดเอง โดยโปรแกรมจะถามผู้ใช้ว่าจะเติมข้อมูลต่อไปอีกหรือไม่ภายหลังจากเติมข้อมูลแต่ละ record แล้ว ซึ่งถ้าตอบว่าใช่ ก็จะวนให้เติมข้อมูลอีก แต่ถ้าตอบว่าไม่ ก็จะจบการทำงาน โดยฟังก์ชันที่ใช้เก็บข้อมูลลงแฟ้ม คือ fwrite( ) ในคำสั่งบรรทัดที่ 29 และการเก็บข้อมูลจะเก็บไว้ที่ตัวแปร struct ซึ่งได้ประกาศไว้ในบรรทัดที่ 6
9.7.2 ฟังก์ชัน fread( )
ฟังก์ชัน fread( ) เป็นฟังก์ชันที่ใช้อ่านข้อมูลจากแฟ้ม โดยที่แต่ละครั้งสามารถกำหนดขนาด (size) ของข้อมูลที่ต้องการอ่านได้
ฟังก์ชัน fread( ) เป็นฟังก์ชันที่ใช้อ่านข้อมูลจากแฟ้ม โดยที่แต่ละครั้งสามารถกำหนดขนาด (size) ของข้อมูลที่ต้องการอ่านได้
รูปแบบการใช้
fread(&var,size,n,fp);
โดยที่
&var คือ ตำแหน่งของตัวแปรที่เก็บข้อมูลที่ต้องการนำไปเก็บไว้ในแฟ้ม
size คือ ขนาดของข้อมูลที่ต้องการ read ขึ้นจากแฟ้มในแต่ละครั้ง ซึ่งสามารถหาได้จากฟังก์ชัน sizeof(data type); หรือ sizeof(variable name); เช่น sizeof(int); หรือ sizeof(j);
n คือ จำนวนครั้งที่ต้องการ read ข้อจากแฟ้ม
fp คือ ตัวชี้ตำแหน่งข้อมูลในแฟ้ม (file pointer)
ข้อควรจำ ฟังก์ชัน fread( ) จะให้ค่าตัวเลขจำนวนเต็ม = n เมื่อไม่เกิดข้อผิดพลาดในการอ่านข้อมูล และจะให้ค่าเป็นศูนย์ (0 หรือ NULL) เมื่อมีข้อผิดพลาดในการอ่านข้อมูลจากแฟ้มหรือสิ้นสุดไฟล์ (EOF)
ตัวอย่างที่ 9.7 แสดงการใช้ฟังก์ชัน fread( )
เช่น 1)
FILE *fptr;
double x;
fread(&x,sizeof(double x),1,fptr);
เป็นการอ่านข้อมูลในแฟ้มข้อมูลมาเก็บไว้ที่ตัวแปร x โดยทำการอ่านข้อมูล 1 ครั้ง (n=1) ขนาดของข้อมูลที่อ่านจากแฟ้มในแต่ละครั้งมีขนาด 8 bytes ตามชนิดตัวแปร x
2)
FILE *fptr;
int a[10]; int j;
for (j=0;j<10;j++)
fread(&a[ j],sizeof(int a[ j]),1,fptr);
เป็นการอ่านข้อมูลในแฟ้มมาเก็บไว้ในตัวแปรชุด a โดยทำการอ่านข้อมูล 10 ครั้ง โดยที่ขนาดของข้อมูลที่อ่านจากแฟ้มในแต่ละครั้งมีขนาด 2 bytes ตามชนิดตัวแปร a[j]
เพื่อความเข้าใจเกี่ยวกับการใช้ฟังก์ชัน fread( ) มากขึ้น ให้ศึกษาโปรแกรม ตัวอย่างดังต่อไปนี้
เพื่อความเข้าใจเกี่ยวกับการใช้ฟังก์ชัน fread( ) มากขึ้น ให้ศึกษาโปรแกรม ตัวอย่างดังต่อไปนี้
โปรแกรมตัวอย่างที่ 9.8 แสดงการใช้งานฟังก์ชัน fread( ) อ่านข้อมูลจากแฟ้มโดยแต่ละครั้งสามารถกำหนดขนาดข้อมูลที่ต้องการอ่านได้
![]() | ![]() | ![]() | ![]() | |
/* rdataf3.c */ | ||||
![]() | ![]() |
ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 9.8 โปรแกรมจะอ่านข้อมูลในแฟ้มที่เราบันทึกไว้ในโปรแกรมตัวอย่างที่ 9.7 ที่ drive a: ชื่อ student.dat แล้วนำข้อมูลทั้งหมดแสดงออกที่จอภาพ
จากโปรแกรมตัวอย่างที่ 9.8 โปรแกรมจะอ่านข้อมูลในแฟ้มที่เราบันทึกไว้ในโปรแกรมตัวอย่างที่ 9.7 ที่ drive a: ชื่อ student.dat แล้วนำข้อมูลทั้งหมดแสดงออกที่จอภาพ
0 ความคิดเห็น:
แสดงความคิดเห็น