การจัดการไฟล์ เป็นการเก็บข้อมูลในไฟล์โดยใช้โปรแกรม ในภาษาโปรแกรม C โปรแกรมจะเก็บผลลัพธ์และข้อมูลอื่นๆ ของโปรแกรมไว้ในไฟล์โดยใช้การจัดการไฟล์ ใน C นอกจากนี้ เราสามารถดึง/ดึงข้อมูลจากไฟล์เพื่อใช้งานในโปรแกรมได้
การดำเนินการที่คุณสามารถดำเนินการกับไฟล์ใน C คือ -
-
การสร้างไฟล์ใหม่
-
การเปิดไฟล์ที่มีอยู่
-
การอ่านข้อมูลจากไฟล์ที่มีอยู่
-
การเขียนข้อมูลลงไฟล์
-
การย้ายข้อมูลไปยังตำแหน่งเฉพาะในไฟล์
-
การปิดไฟล์
การสร้างหรือเปิดไฟล์โดยใช้ fopen()
ฟังก์ชัน fopen() ใช้เพื่อสร้างไฟล์ใหม่หรือเปิดไฟล์ที่มีอยู่ใน C ฟังก์ชัน fopen ถูกกำหนดไว้ใน stdio.h ไฟล์ส่วนหัว
ทีนี้มาดูรูปแบบการสร้างไฟล์ใหม่หรือเปิดไฟล์กัน
file = fopen(“file_name”, “mode”)
นี่เป็นไวยากรณ์ทั่วไปสำหรับทั้งการเปิดและการสร้างไฟล์ในภาษา C.
พารามิเตอร์
file_name − เป็นสตริงที่ระบุชื่อไฟล์ที่จะเปิดหรือสร้างโดยใช้วิธี fopen โหมด:เป็นสตริง (โดยปกติคืออักขระตัวเดียว ) ที่ระบุโหมดที่จะเปิดไฟล์ มีโหมดต่างๆ ให้เปิดไฟล์ในภาษา C เราจะเรียนรู้เกี่ยวกับโหมดเหล่านี้ในบทความนี้
ไฟล์จะถูกสร้างขึ้นเมื่อใด
ฟังก์ชัน fopen จะสร้างไฟล์ใหม่เมื่อไม่พบไฟล์ใดๆ ที่มีชื่อที่ระบุในตำแหน่งที่ระบุ มิฉะนั้น หากพบไฟล์จะถูกเปิดด้วยโหมดที่ระบุ
ลองดูตัวอย่างซึ่งจะทำให้แนวคิดชัดเจน สมมติว่าเรากำลังเปิดไฟล์ชื่อ hello.txt โดยใช้ฟังก์ชัน fopen ต่อไปนี้จะเป็นข้อความ
file = fopen(“hello.txt”, “w”)
การดำเนินการนี้จะค้นหาไฟล์ชื่อ hello.txt ในไดเร็กทอรีปัจจุบัน หากมีไฟล์อยู่ ไฟล์จะเปิดขึ้น มิฉะนั้นจะสร้างไฟล์ใหม่ชื่อ “hello.txt” และเปิดไฟล์ด้วยโหมดเขียน (ระบุโดยใช้ “w”)
ตอนนี้ มาดูโหมดทุกประเภทที่เราสามารถใช้อ่านหรือเขียนไฟล์ในภาษา C และดูตัวอย่างโค้ดที่จะแสดงตัวอย่างการรันโค้ด
โหมด =“ร” − เปิดสำหรับการอ่าน โหมดนี้จะเปิดไฟล์เพื่อจุดประสงค์ในการอ่านเท่านั้น กล่าวคือ สามารถดูเนื้อหาได้เท่านั้น ไม่มีสิ่งใดที่เหมือนกับการแก้ไขที่สามารถทำได้
โหมดนี้ไม่สามารถสร้างไฟล์ใหม่และ open() คืนค่า NULL หากเราพยายามสร้างไฟล์ใหม่โดยใช้โหมดนี้
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "r")){ printf("File opened successfully in read mode"); } else printf("The file is not present! cannot create a new file using r mode"); fclose(file); return 0; }
ผลลัพธ์
File opened successfully in read mode
เราได้สร้างไฟล์ชื่อ hello.txt ในไดเร็กทอรีปัจจุบันของเราแล้ว แต่ถ้าเราพยายามเข้าถึงไฟล์อื่น เราจะได้รับ "The file is not present! ไม่สามารถสร้างไฟล์ใหม่โดยใช้โหมด r” เป็นเอาต์พุตได้
โหมด =“rb” − เปิดสำหรับการอ่านในโหมดไบนารี โหมดนี้จะเปิดไฟล์สำหรับอ่านในโหมดไบนารีเท่านั้น กล่าวคือ เนื้อหาสามารถดูได้เท่านั้นและไม่สามารถแก้ไขอะไรได้อีก
โหมดนี้ไม่สามารถสร้างไฟล์ใหม่และ open() คืนค่า NULL หากเราพยายามสร้างไฟล์ใหม่โดยใช้โหมดนี้
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("program.txt", "rb")){ printf("File opened successfully in read mode"); } else printf("The file is not present! cannot create a new file using rb mode"); fclose(file); return 0; }
ผลลัพธ์
ไฟล์ไม่มีอยู่! ไม่สามารถสร้างไฟล์ใหม่โดยใช้โหมด rb
โหมด =“w” − เปิดสำหรับเขียนเท่านั้น โหมดนี้จะเปิดไฟล์หากมีอยู่ในไดเร็กทอรีปัจจุบันสำหรับการเขียนเท่านั้น เช่น ไม่สามารถดำเนินการอ่านได้ หากไฟล์ไม่มีอยู่ในไดเร็กทอรีปัจจุบัน โปรแกรมจะสร้างไฟล์ใหม่และเปิดขึ้นเพื่อเขียน
หากเราเปิดไฟล์ที่มีข้อความอยู่ เนื้อหาจะถูกเขียนทับ
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("helo.txt", "w")){ printf("File opened successfully in write mode or a new file is created"); } else printf("Error!"); fclose(file); return 0; }
ผลลัพธ์
File opened successfully in write mode or a new file is created
คุณสามารถดูได้ที่นี่ เราพยายามเปิดไฟล์ “helo.txt” ซึ่งไม่มีอยู่ในไดเร็กทอรี แต่ฟังก์ชันดังกล่าวก็ยังส่งคืนข้อความแสดงความสำเร็จเนื่องจากได้สร้างไฟล์ชื่อ “helo.txt”
โหมด =“wb” − เปิดสำหรับการเขียนในโหมดไบนารี โหมดนี้จะเปิดไฟล์หากมีอยู่ในไดเร็กทอรีปัจจุบันสำหรับการเขียนในโหมดไบนารี กล่าวคือ ไม่สามารถดำเนินการอ่านได้ หากไฟล์ไม่มีอยู่ในไดเร็กทอรีปัจจุบัน โปรแกรมจะสร้างไฟล์ใหม่และเปิดขึ้นเพื่อเขียนในโหมดไบนารี
หากเราเปิดไฟล์ที่มีข้อความอยู่ เนื้อหาจะถูกเขียนทับ
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "wb")){ printf("File opened successfully in write in binary mode or a new file is created"); } else printf("Error!"); fclose(file); return 0; }
ผลลัพธ์
เปิดไฟล์สำเร็จในการเขียนในโหมดไบนารีหรือสร้างไฟล์ใหม่
โหมด =“a” − เปิดเพื่อผนวกเท่านั้น โหมดนี้จะเปิดไฟล์หากมีอยู่ในไดเร็กทอรีปัจจุบันสำหรับการเขียนเท่านั้น เช่น ไม่สามารถดำเนินการอ่านได้ หากไฟล์ไม่มีอยู่ในไดเร็กทอรีปัจจุบัน โปรแกรมจะสร้างไฟล์ใหม่และเปิดขึ้นเพื่อเขียน หากเราเปิดไฟล์ที่มีข้อความอยู่ เนื้อหาจะไม่ถูกเขียนทับ แทนข้อความใหม่จะถูกเพิ่มหลังจากข้อความที่มีอยู่ในไฟล์แทน
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "a")){ printf("File opened successfully in append mode or a new file is created"); } else printf("Error!"); fclose(file); return 0; }
ผลลัพธ์
File opened successfully in append mode or a new file is created
โหมด =“ab” − เปิดสำหรับการผนวกในไบนารี โหมดนี้จะเปิดไฟล์หากมีอยู่ในไดเร็กทอรีปัจจุบันสำหรับการเขียนในรูปแบบไบนารีเท่านั้น เช่น ไม่สามารถดำเนินการอ่านได้ หากไฟล์ไม่มีอยู่ในไดเร็กทอรีปัจจุบัน โปรแกรมจะสร้างไฟล์ใหม่และเปิดขึ้นเพื่อเขียนเป็นไบนารี
หากเราเปิดไฟล์ที่มีข้อความอยู่ เนื้อหาจะไม่ถูกเขียนทับ แทนข้อความใหม่จะถูกเพิ่มหลังจากข้อความที่มีอยู่ในไฟล์แทน
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "ab")){ printf("File opened successfully in append in binary mode or a new file is created"); } else printf("Error!"); fclose(file); return 0; }
ผลลัพธ์
File opened successfully in append in binary mode or a new file is created
โหมด =“r+” − เปิดสำหรับอ่านและเขียนทั้งสองโหมด โหมดนี้จะเปิดไฟล์สำหรับทั้งการอ่านและการเขียน เช่น การดำเนินการอ่านและเขียนในไฟล์นั้นสามารถทำได้
โหมดนี้ไม่สามารถสร้างไฟล์ใหม่และ open() คืนค่า NULL หากเราพยายามสร้างไฟล์ใหม่โดยใช้โหมดนี้
หากเราเปิดไฟล์ที่มีข้อความอยู่ในนั้นและเขียนอะไรบางอย่าง เนื้อหานั้นจะถูกเขียนทับ
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "r+")){ printf("File opened successfully in read and write both"); } else printf("The file is not present! cannot create a new file using r+ mode"); fclose(file); return 0; }
ผลลัพธ์
File opened successfully in read and write both
เราได้สร้างไฟล์ชื่อ hello.txt ในไดเร็กทอรีปัจจุบันของเราแล้ว แต่ถ้าเราพยายามเข้าถึงไฟล์อื่น เราจะได้รับ "The file is not present! ไม่สามารถสร้างไฟล์ใหม่โดยใช้โหมด r+” เป็นเอาต์พุตได้
โหมด =“rb+” − เปิดสำหรับการอ่านในโหมดไบนารี โหมดนี้จะเปิดไฟล์สำหรับอ่านในโหมดไบนารีเท่านั้น กล่าวคือ เนื้อหาสามารถดูได้เท่านั้นและไม่สามารถแก้ไขอะไรได้อีก
โหมดนี้ไม่สามารถสร้างไฟล์ใหม่และ open() คืนค่า NULL หากเราพยายามสร้างไฟล์ใหม่โดยใช้โหมดนี้
หากเราเปิดไฟล์ที่มีข้อความอยู่ในนั้นและเขียนอะไรบางอย่าง เนื้อหานั้นจะถูกเขียนทับ
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("program.txt", "rb+")){ printf("File opened successfully in read mode"); } else printf("The file is not present! cannot create a new file using rb+ mode"); fclose(file); return 0; }
ผลลัพธ์
The file is not present! cannot create a new file using rb+ mode
โหมด =“w” − เปิดสำหรับเขียนและอ่าน โหมดนี้จะเปิดไฟล์หากมีอยู่ในไดเร็กทอรีปัจจุบันสำหรับการดำเนินการเขียนและอ่านทั้งคู่ หากไฟล์ไม่มีอยู่ในไดเร็กทอรีปัจจุบัน โปรแกรมจะสร้างไฟล์ใหม่และเปิดเพื่ออ่านและเขียน
หากเราเปิดไฟล์ที่มีข้อความอยู่ เนื้อหาจะถูกเขียนทับ
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("helo.txt", "w+")){ printf("File opened successfully in read-write mode or a new file is created"); } else printf("Error!"); fclose(file); return 0; }
ผลลัพธ์
File opened successfully in read-write mode or a new file is created
คุณสามารถดูได้ที่นี่ เราพยายามเปิดไฟล์ “helo.txt” ซึ่งไม่มีอยู่ในไดเร็กทอรี แต่ฟังก์ชันดังกล่าวก็ยังส่งคืนข้อความแสดงความสำเร็จเนื่องจากได้สร้างไฟล์ชื่อ “helo.txt”
Mode =“wb+” :เปิดสำหรับเขียนและอ่านในโหมดไบนารี โหมดนี้จะเปิดไฟล์หากมีอยู่ในไดเร็กทอรีปัจจุบันสำหรับเขียนและอ่านใน
โหมดไบนารี หากไฟล์นั้นไม่มีอยู่ในไดเร็กทอรีปัจจุบัน โปรแกรมจะสร้างไฟล์ขึ้นมาใหม่และเปิดไฟล์นั้นเพื่ออ่านและเขียนในโหมดไบนารี หากเราเปิดไฟล์ที่มีข้อความอยู่ในนั้น เนื้อหาจะถูกเขียนทับ
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "wb+")){ printf("File opened successfully in read-write in binary mode or a new file is created"); } else printf("Error!"); fclose(file); return 0; }
ผลลัพธ์
File opened successfully in read-write in binary mode or a new file is created
โหมด =“a+” − เปิดเพื่ออ่านและต่อท้าย โหมดนี้จะเปิดไฟล์หากมีอยู่ในไดเร็กทอรีปัจจุบันสำหรับทั้งการอ่านและการเขียน หากไฟล์ไม่มีอยู่ในไดเร็กทอรีปัจจุบัน โปรแกรมจะสร้างไฟล์ใหม่และเปิดเพื่ออ่านและเขียน
หากเราเปิดไฟล์ที่มีข้อความอยู่ เนื้อหาจะไม่ถูกเขียนทับ แทนข้อความใหม่จะถูกเพิ่มหลังจากข้อความที่มีอยู่ในไฟล์แทน
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "a+")){ printf("File opened successfully in read-append mode or a new file is created"); } else printf("Error!"); fclose(file); return 0; }
ผลลัพธ์
เปิดไฟล์สำเร็จในโหมดอ่านต่อท้ายหรือสร้างไฟล์ใหม่
โหมด =“ab+” − เปิดเพื่ออ่านและผนวกในไบนารี โหมดนี้จะเปิดไฟล์หากมีอยู่ในไดเร็กทอรีปัจจุบันสำหรับทั้งการอ่านและการเขียนในรูปแบบไบนารี หากไฟล์ไม่มีอยู่ในไดเร็กทอรีปัจจุบัน โปรแกรมจะสร้างไฟล์ใหม่และเปิดขึ้นเพื่ออ่านและเขียนในรูปแบบไบนารี หากเราเปิดไฟล์ที่มีข้อความอยู่ เนื้อหาจะไม่ถูกเขียนทับ แทนข้อความใหม่จะถูกเพิ่มหลังจากข้อความที่มีอยู่ในไฟล์แทน
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "ab+")){ printf("File opened successfully in read-append in binary mode or a new file is created"); } else printf("Error!”); fclose(file); return 0; }
ผลลัพธ์
File opened successfully in read-append mode or a new file is created
การอ่านข้อมูลจากไฟล์ที่มีอยู่
เราสามารถอ่านเนื้อหาของไฟล์ในภาษา c ได้โดยใช้ฟังก์ชัน fscanf() และ fgets() และ fgetc() ทั้งหมดใช้เพื่ออ่านเนื้อหาในไฟล์ มาดูการทำงานของแต่ละฟังก์ชั่นกัน −
fscanf()
ฟังก์ชัน fscanf() ใช้สำหรับอ่านชุดอักขระ เช่น สตริงจากไฟล์ มันส่งกลับ EOF เมื่อเนื้อหาทั้งหมดของไฟล์ถูกอ่านโดยมัน
ไวยากรณ์
int fscanf(FILE *stream, const char *charPointer[])
พารามิเตอร์
FILE *stream: the pointer to the opened file. const char *charPointer[]: string of character.
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; char str[500]; if (file = fopen("hello.txt", "r")){ while(fscanf(file,"%s", str)!=EOF){ printf("%s", str); } } else printf("Error!”); fclose(file); return 0; }
ผลลัพธ์
LearnprogrammingattutorialsPoint
fgets()
ฟังก์ชัน fget() ใน C ใช้เพื่ออ่านสตริงจากสตรีม
ไวยากรณ์
char* fgets(char *string, int length, FILE *stream)
พารามิเตอร์
char *string: It is a string which will store the data from the string. int length: It is an int which gives the length of string to be considered. FILE *stream: It is the pointer to the opened file.
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; char str[500]; if (file = fopen("hello.txt", "r")){ printf("%s", fgets(str, 50, file)); } fclose(file); return 0; }
ผลลัพธ์
Learn programming at tutorials Point
fgetc()
ฟังก์ชัน fgetc() ใน C ใช้เพื่อส่งคืนอักขระตัวเดียวจากไฟล์ รับอักขระจากไฟล์และส่งคืน EOF ที่ส่วนท้ายของไฟล์
ไวยากรณ์
char* fgetc(FILE *stream)
พารามิเตอร์
FILE *stream: It is the pointer to the opened file.
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; char str; if (file = fopen("hello.txt", "r")){ while((str=fgetc(file))!=EOF) printf("%c",str); } fclose(file); return 0; }
ผลลัพธ์
Learn programming at tutorials Point
การเขียนข้อมูลลงไฟล์ในภาษา C
เราสามารถเขียนข้อมูลไปยังไฟล์ในภาษา C โดยใช้ฟังก์ชัน fprintf(), fputs(), fputc() ทั้งหมดใช้เพื่อเขียนเนื้อหาลงในไฟล์
มาดูการทำงานของแต่ละฟังก์ชั่นกัน −
fprintf()
ฟังก์ชัน fprintf() ใช้สำหรับเขียนข้อมูลลงในไฟล์ มันเขียนชุดอักขระในไฟล์
ไวยากรณ์
int fprintf(FILE *stream, char *string[])
พารามิเตอร์
FILE for *stream: It is the pointer to the opened file. char *string[]: It is the character array that we want to write in the file.
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "w")){ if(fprintf(file, "tutorials Point”) >= 0) printf("Write operation successful"); } fclose(file); return 0; }
ผลลัพธ์
Write operation successful
fputf()
ฟังก์ชัน fputf() ใน C สามารถใช้เขียนไฟล์ได้ ใช้สำหรับเขียนบรรทัด (บรรทัดอักขระ) ลงในไฟล์
ไวยากรณ์
int fputs(const char *string, FILE *stream)
พารามิเตอร์
Constant char *string[]: It is the character array that we want to write in the file. FILE for *stream: It is the pointer to the opened file.
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "w")){ if(fputs("tutorials Point", file) >= 0) printf("String written to the file successfully..."); } fclose(file); return 0; }
ผลลัพธ์
String written to the file successfully…
fputc()
ฟังก์ชัน fputc() ใช้สำหรับเขียนอักขระตัวเดียวลงในไฟล์
ไวยากรณ์
int fputc(char character , FILE *stream)
พารามิเตอร์
char character : It is the character that we want to write in the file. FILE for *stream: It is the pointer to the opened file.
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; if (file = fopen("hello.txt", "w")){ fputc('T', file); } fclose(file); return 0; }
ผลลัพธ์
‘T’ is written to the file.
fclose()
ฟังก์ชัน fclose() ใช้สำหรับปิดไฟล์ที่เปิดอยู่ เราควรปิดไฟล์หลังจากดำเนินการกับไฟล์เพื่อบันทึกการดำเนินการที่เรานำไปใช้กับมัน
ไวยากรณ์
fclose(FILE *stream)
พารามิเตอร์
FILE for *stream: It is the pointer to the opened file.
ตัวอย่าง
#include <stdio.h> int main(){ FILE * file; char string[300]; if (file = fopen("hello.txt", "a+")){ while(fscanf(file,"%s", string)!=EOF){ printf("%s", string); } fputs("Hello", file); } fclose(file); return 0; }
ผลลัพธ์
LearnprogrammingatTutorialsPoint
ไฟล์ประกอบด้วย
Learn programming at Tutorials PointHello