ไฟล์ C I/O: สร้าง เปิด อ่าน เขียน และปิดไฟล์

ค การจัดการไฟล์

ไฟล์สามารถใช้จัดเก็บข้อมูลถาวรจำนวนมากได้ เช่นเดียวกับภาษาอื่น ๆ ภาษา C มีฟังก์ชันการจัดการไฟล์ดังต่อไปนี้

  1. การสร้างไฟล์
  2. การเปิดไฟล์
  3. กำลังอ่านไฟล์
  4. กำลังเขียนลงในไฟล์
  5. การปิดไฟล์

ต่อไปนี้เป็นฟังก์ชันการจัดการไฟล์ที่สำคัญที่สุดที่มีอยู่ใน '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” ซึ่งแสดงว่าเขียนประโยคสำเร็จแล้ว กระบวนการคือนำอักขระแต่ละตัวของอาร์เรย์มาเขียนลงในไฟล์

การเขียนไฟล์

  1. ในโปรแกรมข้างต้น เราได้สร้างและเปิดไฟล์ชื่อ fputc_test.txt ในโหมดเขียน และประกาศสตริงของเราซึ่งจะถูกเขียนลงในไฟล์
  2. เราทำการเขียนทีละอักขระโดยใช้ลูป 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:

การเขียนไฟล์

การเขียนไฟล์

  1. ในโปรแกรมข้างต้น เราได้สร้างและเปิดไฟล์ชื่อ fputs_test.txt ในโหมดเขียน
  2. หลังจากที่เราทำการดำเนินการเขียนโดยใช้ฟังก์ชั่น fputs() โดยการเขียนสามแบบที่แตกต่างกัน เงื่อนไข
  3. จากนั้นไฟล์จะถูกปิดโดยใช้ฟังก์ชัน 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:

การเขียนไฟล์

การเขียนไฟล์

  1. ในโปรแกรมข้างต้นเราได้สร้างและเปิดไฟล์ชื่อ fprintf_test.txt ในโหมดเขียน
  2. หลังจากดำเนินการเขียนโดยใช้ฟังก์ชัน 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

การอ่านข้อมูลจากไฟล์

  1. ในโปรแกรมด้านบน เราได้เปิดไฟล์ชื่อ “fprintf_test.txt” ซึ่งเขียนไว้ก่อนหน้านี้โดยใช้ฟังก์ชัน fprintf() และมีสตริง “Learning C with Guru99” เราอ่านไฟล์นี้โดยใช้ฟังก์ชัน fgets() ซึ่งจะอ่านทีละบรรทัด โดยขนาดบัฟเฟอร์ต้องเพียงพอสำหรับการจัดการทั้งบรรทัด
  2. เราเปิดไฟล์อีกครั้งเพื่อรีเซ็ตไฟล์ตัวชี้ให้ชี้ไปที่จุดเริ่มต้นของไฟล์ สร้างตัวแปรสตริงต่างๆ เพื่อจัดการแต่ละคำแยกกัน พิมพ์ตัวแปรเพื่อดูเนื้อหา fscanf() ส่วนใหญ่จะใช้เพื่อแยกและแยกข้อมูลจากไฟล์
  3. เปิดไฟล์อีกครั้งเพื่อรีเซ็ตไฟล์ตัวชี้ให้ชี้ไปที่จุดเริ่มต้นของไฟล์ อ่านข้อมูลและพิมพ์จากไฟล์ทีละอักขระโดยใช้ฟังก์ชัน getc() จนกระทั่งพบคำสั่ง EOF
  4. หลังจากดำเนินการอ่านไฟล์โดยใช้ตัวแปรต่างๆ แล้ว เราได้ปิดไฟล์อีกครั้งโดยใช้ฟังก์ชัน 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:

ไฟล์แบบโต้ตอบอ่านและเขียนด้วย getc และ putc

ไฟล์แบบโต้ตอบอ่านและเขียนด้วย getc และ putc

  1. ในโปรแกรมข้างต้นเราได้สร้างและเปิดไฟล์ที่เรียกว่าการสาธิตในโหมดเขียน
  2. หลังจากดำเนินการเขียนแล้ว ไฟล์จะถูกปิดโดยใช้ฟังก์ชัน fclose
  3. เราได้เปิดไฟล์อีกครั้งซึ่งขณะนี้มีข้อมูลอยู่ในโหมดอ่าน ลูป while จะทำงานจนกว่าจะพบ eof เมื่อพบจุดสิ้นสุดของไฟล์แล้ว การทำงานจะสิ้นสุดลงและจะแสดงข้อมูลโดยใช้ฟังก์ชัน printf
  4. หลังจากดำเนินการอ่านไฟล์จะถูกปิดอีกครั้งโดยใช้ฟังก์ชัน fclose

สรุป

  • ไฟล์คือพื้นที่ในหน่วยความจำที่จัดเก็บข้อมูล
  • การเขียนโปรแกรม 'C' มีฟังก์ชันต่างๆ เพื่อจัดการกับไฟล์
  • กลไกการจัดการไฟล์เรียกว่าการจัดการไฟล์
  • จะต้องเปิดไฟล์ก่อนจึงจะดำเนินการใดๆ กับไฟล์นั้นได้
  • ไฟล์สามารถเปิดได้ในโหมดอ่าน เขียน หรือต่อท้าย
  • ฟังก์ชัน Getc และ putc ใช้ในการอ่านและเขียนอักขระตัวเดียว
  • ฟังก์ชัน fscanf() อนุญาตให้อ่านและแยกข้อมูลจากไฟล์
  • เราสามารถอ่านได้ (โดยใช้ รับ function) ทั้งไฟล์โดยการวนซ้ำเพื่อให้ครอบคลุมไฟล์ทั้งหมดจนกว่าจะพบ EOF
  • หลังจากสร้างชื่อแล้ว เราสามารถเขียนลงไฟล์ได้โดยใช้ฟังก์ชัน fprintf() และต้องมีอักขระขึ้นบรรทัดใหม่ต่อท้ายข้อความสตริง