ไฟล์ C I/O: สร้าง เปิด อ่าน เขียน และปิดไฟล์
ค การจัดการไฟล์
ไฟล์สามารถใช้จัดเก็บข้อมูลถาวรจำนวนมากได้ เช่นเดียวกับภาษาอื่น ๆ ภาษา C มีฟังก์ชันการจัดการไฟล์ดังต่อไปนี้
- การสร้างไฟล์
- การเปิดไฟล์
- กำลังอ่านไฟล์
- กำลังเขียนลงในไฟล์
- การปิดไฟล์
ต่อไปนี้เป็นฟังก์ชันการจัดการไฟล์ที่สำคัญที่สุดที่มีอยู่ใน 'C'
ฟังก์ชัน | วัตถุประสงค์ | |
---|---|---|
เปิด () | การสร้างไฟล์หรือการเปิดไฟล์ที่มีอยู่ | |
ปิด () | การปิดไฟล์ | |
fprintf() | การเขียนบล็อกข้อมูลลงในไฟล์ | |
fscanf () | การอ่านข้อมูลบล็อกจากไฟล์ | |
รับ () | อ่านอักขระตัวเดียวจากไฟล์ | |
ใส่c () | เขียนอักขระตัวเดียวลงในไฟล์ | |
เก็ท () | อ่านจำนวนเต็มจากไฟล์ | |
พัต () | การเขียนจำนวนเต็มลงในไฟล์ | |
ค้นหา () | ตั้งค่าตำแหน่งของตัวชี้ไฟล์ไปยังตำแหน่งที่ระบุ | |
ฟุตเทลล์ () | ส่งกลับตำแหน่งปัจจุบันของตัวชี้ไฟล์ | |
ย้อนกลับ () | ตั้งค่าตัวชี้ไฟล์ที่จุดเริ่มต้นของไฟล์ |
วิธีสร้างไฟล์
เมื่อใดก็ตามที่คุณต้องการทำงานกับไฟล์ ขั้นตอนแรกคือการสร้างไฟล์ ไฟล์ไม่มีอะไรนอกจากพื้นที่ในหน่วยความจำที่จัดเก็บข้อมูล
ในการสร้างไฟล์ในโปรแกรม 'C' ให้ใช้รูปแบบต่อไปนี้
FILE *fp; fp = fopen ("file_name", "mode");
ในรูปแบบข้างต้น ไฟล์คือโครงสร้างข้อมูลที่กำหนดไว้ในไลบรารีมาตรฐาน
fopen เป็นฟังก์ชันมาตรฐานที่ใช้เปิดไฟล์
- หากไม่มีไฟล์อยู่ในระบบ ไฟล์นั้นจะถูกสร้างขึ้นแล้วเปิดขึ้น
- หากมีไฟล์อยู่ในระบบอยู่แล้ว ไฟล์นั้นจะถูกเปิดโดยตรงโดยใช้สิ่งนี้ ฟังก์ชัน.
fp เป็นตัวชี้ไฟล์ซึ่งชี้ไปที่ไฟล์ประเภท
ทุกครั้งที่คุณเปิดหรือสร้างไฟล์ คุณต้องระบุว่าจะทำอะไรกับไฟล์นั้น ไฟล์ในการเขียนโปรแกรมภาษา C สามารถสร้างหรือเปิดเพื่ออ่าน/เขียนได้ โหมดใช้เพื่อระบุว่าคุณต้องการเปิดไฟล์เพื่อวัตถุประสงค์ใด ๆ ที่ระบุไว้ด้านล่างหรือไม่ ต่อไปนี้คือโหมดประเภทต่าง ๆ ในการเขียนโปรแกรมภาษา C ที่สามารถใช้ได้ขณะทำงานกับไฟล์
โหมดไฟล์ | Descriptไอออน |
---|---|
r | เปิดไฟล์เพื่ออ่าน หากไฟล์อยู่ในโหมดการอ่าน จะไม่มีการลบข้อมูลหากมีไฟล์อยู่ในระบบอยู่แล้ว |
w | เปิดไฟล์เพื่อเขียน หากไฟล์อยู่ในโหมดการเขียน ไฟล์ใหม่จะถูกสร้างขึ้นหากไม่มีไฟล์อยู่เลย หากมีไฟล์อยู่ในระบบอยู่แล้ว ข้อมูลทั้งหมดภายในไฟล์จะถูกตัดทอน และจะถูกเปิดขึ้นเพื่อวัตถุประสงค์ในการเขียน |
a | เปิดไฟล์ใน โหมดผนวก หากไฟล์อยู่ในโหมดผนวก ไฟล์นั้นจะถูกเปิด เนื้อหาภายในไฟล์ไม่เปลี่ยนแปลง |
r+ | เปิดให้อ่านและเขียนได้ตั้งแต่ต้น |
w+ | เปิดอ่านและเขียนทับไฟล์ได้ |
a+ | เปิดอ่านเขียนต่อท้ายไฟล์ได้ |
ในรูปแบบที่กำหนด ชื่อไฟล์และโหมดจะถูกระบุเป็นสตริง ดังนั้นจึงต้องอยู่ในเครื่องหมายคำพูดคู่เสมอ
ตัวอย่าง:
#include <stdio.h> int main() { FILE *fp; fp = fopen ("data.txt", "w"); }
Output:
ไฟล์ถูกสร้างขึ้นในโฟลเดอร์เดียวกับที่คุณบันทึกรหัสของคุณ
คุณสามารถระบุเส้นทางที่คุณต้องการสร้างไฟล์ของคุณได้
#include <stdio.h> int main() { FILE *fp; fp = fopen ("D://data.txt", "w"); }
วิธีปิดไฟล์
ควรปิดไฟล์ทุกครั้งเมื่อดำเนินการเสร็จสิ้น เนื่องจากเนื้อหาและลิงก์ไปยังไฟล์จะถูกยกเลิก วิธีนี้จะช่วยป้องกันไม่ให้ไฟล์เสียหายโดยไม่ได้ตั้งใจ
'C' มีฟังก์ชัน fclose สำหรับปิดไฟล์ โดยมีรูปแบบคำสั่ง fclose ดังต่อไปนี้
fclose (file_pointer);
ตัวอย่าง:
FILE *fp; fp = fopen ("data.txt", "r"); fclose (fp);
ฟังก์ชัน fclose ใช้ตัวชี้ไฟล์เป็นอาร์กิวเมนต์ ไฟล์ที่เกี่ยวข้องกับตัวชี้ไฟล์จะถูกปิดโดยใช้ฟังก์ชัน fclose จะส่งคืนค่า 0 หากการปิดสำเร็จ และ EOF (สิ้นสุดไฟล์) หากมีข้อผิดพลาดเกิดขึ้นขณะปิดไฟล์
หลังจากปิดไฟล์แล้ว ตัวชี้ไฟล์เดียวกันยังสามารถใช้กับไฟล์อื่นได้
ในการเขียนโปรแกรม 'C' ไฟล์จะถูกปิดโดยอัตโนมัติเมื่อโปรแกรมถูกยกเลิก การปิดไฟล์ด้วยตนเองโดยการเขียนฟังก์ชัน fclose เป็นแนวทางการเขียนโปรแกรมที่ดี
การเขียนไฟล์
ในภาษา C เมื่อคุณเขียนลงไฟล์ จะต้องเพิ่มอักขระขึ้นบรรทัดใหม่ '\n' อย่างชัดเจน
ไลบรารี stdio มีฟังก์ชันที่จำเป็นในการเขียนลงไฟล์:
- fputc(ถ่าน, file_pointer): มันเขียนอักขระไปยังไฟล์ที่ชี้โดย file_pointer
- fputs(str, file_pointer): มันเขียนสตริงไปยังไฟล์ที่ชี้โดย file_pointer
- fprintf (file_pointer, str, ตัวแปร_รายการ): จะพิมพ์สตริงไปยังไฟล์ที่ชี้โดย file_pointer สตริงอาจรวมตัวระบุรูปแบบและรายการตัวแปร Variable_lists ก็ได้
โปรแกรมด้านล่างนี้แสดงวิธีการเขียนลงไฟล์:
fputc() ฟังก์ชั่น:
#include <stdio.h> int main() { int i; FILE * fptr; char fn[50]; char str[] = "Guru99 Rocks\n"; fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode" for (i = 0; str[i] != '\n'; i++) { /* write to file using fputc() function */ fputc(str[i], fptr); } fclose(fptr); return 0; }
Output:
โปรแกรมข้างต้นเขียนอักขระตัวเดียวลงใน fputc_test.txt จนกระทั่งถึงสัญลักษณ์บรรทัดถัดไป “\n” ซึ่งแสดงว่าเขียนประโยคสำเร็จแล้ว กระบวนการคือนำอักขระแต่ละตัวของอาร์เรย์มาเขียนลงในไฟล์
- ในโปรแกรมข้างต้น เราได้สร้างและเปิดไฟล์ชื่อ fputc_test.txt ในโหมดเขียน และประกาศสตริงของเราซึ่งจะถูกเขียนลงในไฟล์
- เราทำการเขียนทีละอักขระโดยใช้ลูป for และใส่แต่ละตัวอักขระลงในไฟล์จนกว่าจะพบอักขระ "\n" จากนั้นจึงปิดไฟล์โดยใช้ฟังก์ชัน fclose
fputs () ฟังก์ชัน:
#include <stdio.h> int main() { FILE * fp; fp = fopen("fputs_test.txt", "w+"); fputs("This is Guru99 Tutorial on fputs,", fp); fputs("We don't need to use for loop\n", fp); fputs("Easier than fputc function\n", fp); fclose(fp); return (0); }
Output:
- ในโปรแกรมข้างต้น เราได้สร้างและเปิดไฟล์ชื่อ fputs_test.txt ในโหมดเขียน
- หลังจากที่เราทำการดำเนินการเขียนโดยใช้ฟังก์ชั่น fputs() โดยการเขียนสามแบบที่แตกต่างกัน เงื่อนไข
- จากนั้นไฟล์จะถูกปิดโดยใช้ฟังก์ชัน fclose
fprintf()ฟังก์ชัน:
#include <stdio.h> int main() { FILE *fptr; fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode" /* write to file */ fprintf(fptr, "Learning C with Guru99\n"); fclose(fptr); return 0; }
Output:
- ในโปรแกรมข้างต้นเราได้สร้างและเปิดไฟล์ชื่อ fprintf_test.txt ในโหมดเขียน
- หลังจากดำเนินการเขียนโดยใช้ฟังก์ชัน fprintf() โดยการเขียนสตริงแล้ว ไฟล์จะถูกปิดโดยใช้ฟังก์ชัน fclose
การอ่านข้อมูลจากไฟล์
มีฟังก์ชันที่แตกต่างกันสามฟังก์ชันสำหรับการอ่านข้อมูลจากไฟล์โดยเฉพาะ
- fgetc(file_pointer): มันจะส่งคืนอักขระถัดไปจากไฟล์ที่ตัวชี้ไฟล์ชี้ไป เมื่อถึงจุดสิ้นสุดของไฟล์ EOF จะถูกส่งกลับ
- fgets(บัฟเฟอร์, n, ตัวชี้ไฟล์): อ่านอักขระ n-1 ตัวจากไฟล์และเก็บสตริงในบัฟเฟอร์ซึ่งอักขระ NULL '\0' จะถูกผนวกเป็นอักขระตัวสุดท้าย
- fscanf (file_pointer, Conversion_specifiers, ตัวแปร_ที่อยู่): ใช้ในการแยกวิเคราะห์และวิเคราะห์ข้อมูล มันจะอ่านอักขระจากไฟล์และกำหนดอินพุตให้กับรายการ พอยน์เตอร์ตัวแปร ตัวแปร_ที่อยู่โดยใช้ตัวระบุการแปลง โปรดทราบว่าเช่นเดียวกับ scanf fscanf จะหยุดอ่านสตริงเมื่อพบช่องว่างหรือการขึ้นบรรทัดใหม่
โปรแกรมต่อไปนี้สาธิตการอ่านจากไฟล์ fputs_test.txt โดยใช้ฟังก์ชัน fgets(),fscanf() และ fgetc() ตามลำดับ:
#include <stdio.h> int main() { FILE * file_pointer; char buffer[30], c; file_pointer = fopen("fprintf_test.txt", "r"); printf("----read a line----\n"); fgets(buffer, 50, file_pointer); printf("%s\n", buffer); printf("----read and parse data----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer char str1[10], str2[2], str3[20], str4[2]; fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4); printf("Read String1 |%s|\n", str1); printf("Read String2 |%s|\n", str2); printf("Read String3 |%s|\n", str3); printf("Read String4 |%s|\n", str4); printf("----read the entire file----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer while ((c = getc(file_pointer)) != EOF) printf("%c", c); fclose(file_pointer); return 0; }
ผลลัพธ์:
----read a line---- Learning C with Guru99 ----read and parse data---- Read String1 |Learning| Read String2 |C| Read String3 |with| Read String4 |Guru99| ----read the entire file---- Learning C with Guru99
- ในโปรแกรมด้านบน เราได้เปิดไฟล์ชื่อ “fprintf_test.txt” ซึ่งเขียนไว้ก่อนหน้านี้โดยใช้ฟังก์ชัน fprintf() และมีสตริง “Learning C with Guru99” เราอ่านไฟล์นี้โดยใช้ฟังก์ชัน fgets() ซึ่งจะอ่านทีละบรรทัด โดยขนาดบัฟเฟอร์ต้องเพียงพอสำหรับการจัดการทั้งบรรทัด
- เราเปิดไฟล์อีกครั้งเพื่อรีเซ็ตไฟล์ตัวชี้ให้ชี้ไปที่จุดเริ่มต้นของไฟล์ สร้างตัวแปรสตริงต่างๆ เพื่อจัดการแต่ละคำแยกกัน พิมพ์ตัวแปรเพื่อดูเนื้อหา fscanf() ส่วนใหญ่จะใช้เพื่อแยกและแยกข้อมูลจากไฟล์
- เปิดไฟล์อีกครั้งเพื่อรีเซ็ตไฟล์ตัวชี้ให้ชี้ไปที่จุดเริ่มต้นของไฟล์ อ่านข้อมูลและพิมพ์จากไฟล์ทีละอักขระโดยใช้ฟังก์ชัน getc() จนกระทั่งพบคำสั่ง EOF
- หลังจากดำเนินการอ่านไฟล์โดยใช้ตัวแปรต่างๆ แล้ว เราได้ปิดไฟล์อีกครั้งโดยใช้ฟังก์ชัน fclose
ไฟล์แบบโต้ตอบอ่านและเขียนด้วย getc และ putc
การดำเนินการกับไฟล์เหล่านี้เป็นเรื่องง่ายที่สุด Getc ย่อมาจาก get character และ putc ย่อมาจาก put character ฟังก์ชันทั้งสองนี้ใช้สำหรับจัดการอักขระเพียงตัวเดียวในแต่ละครั้ง
โปรแกรมต่อไปนี้สาธิตฟังก์ชันการจัดการไฟล์ในการเขียนโปรแกรม 'C':
#include <stdio.h> int main() { FILE * fp; char c; printf("File Handling\n"); //open a file fp = fopen("demo.txt", "w"); //writing operation while ((c = getchar()) != EOF) { putc(c, fp); } //close file fclose(fp); printf("Data Entered:\n"); //reading fp = fopen("demo.txt", "r"); while ((c = getc(fp)) != EOF) { printf("%c", c); } fclose(fp); return 0; }
Output:
- ในโปรแกรมข้างต้นเราได้สร้างและเปิดไฟล์ที่เรียกว่าการสาธิตในโหมดเขียน
- หลังจากดำเนินการเขียนแล้ว ไฟล์จะถูกปิดโดยใช้ฟังก์ชัน fclose
- เราได้เปิดไฟล์อีกครั้งซึ่งขณะนี้มีข้อมูลอยู่ในโหมดอ่าน ลูป while จะทำงานจนกว่าจะพบ eof เมื่อพบจุดสิ้นสุดของไฟล์แล้ว การทำงานจะสิ้นสุดลงและจะแสดงข้อมูลโดยใช้ฟังก์ชัน printf
- หลังจากดำเนินการอ่านไฟล์จะถูกปิดอีกครั้งโดยใช้ฟังก์ชัน fclose
สรุป
- ไฟล์คือพื้นที่ในหน่วยความจำที่จัดเก็บข้อมูล
- การเขียนโปรแกรม 'C' มีฟังก์ชันต่างๆ เพื่อจัดการกับไฟล์
- กลไกการจัดการไฟล์เรียกว่าการจัดการไฟล์
- จะต้องเปิดไฟล์ก่อนจึงจะดำเนินการใดๆ กับไฟล์นั้นได้
- ไฟล์สามารถเปิดได้ในโหมดอ่าน เขียน หรือต่อท้าย
- ฟังก์ชัน Getc และ putc ใช้ในการอ่านและเขียนอักขระตัวเดียว
- ฟังก์ชัน fscanf() อนุญาตให้อ่านและแยกข้อมูลจากไฟล์
- เราสามารถอ่านได้ (โดยใช้ รับ function) ทั้งไฟล์โดยการวนซ้ำเพื่อให้ครอบคลุมไฟล์ทั้งหมดจนกว่าจะพบ EOF
- หลังจากสร้างชื่อแล้ว เราสามารถเขียนลงไฟล์ได้โดยใช้ฟังก์ชัน fprintf() และต้องมีอักขระขึ้นบรรทัดใหม่ต่อท้ายข้อความสตริง