Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พื้นฐานของการจัดการไฟล์ในการเขียนโปรแกรม C


การจัดการไฟล์ เป็นการเก็บข้อมูลในไฟล์โดยใช้โปรแกรม ในภาษาโปรแกรม 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