Computer >> Máy Tính >  >> Lập trình >> C ++

Kiến thức cơ bản về xử lý tệp trong lập trình C

Xử lý tệp là việc lưu trữ dữ liệu trong tệp bằng chương trình. Trong ngôn ngữ lập trình C, chương trình lưu trữ kết quả và dữ liệu khác của chương trình vào một tệp bằng cách sử dụng xử lý tệp trong C. Ngoài ra, chúng tôi có thể trích xuất / tìm nạp dữ liệu từ một tệp để làm việc với nó trong chương trình.

Các thao tác mà bạn có thể thực hiện trên Tệp trong C là -

  • Tạo tệp mới

  • Mở tệp hiện có

  • Đọc dữ liệu từ một tệp hiện có

  • Ghi dữ liệu vào tệp

  • Di chuyển dữ liệu đến một vị trí cụ thể trên tệp

  • Đóng tệp

Tạo hoặc mở tệp bằng fopen ()

Hàm fopen () được sử dụng để tạo tệp mới hoặc mở tệp hiện có trong C. Hàm fopen được định nghĩa trong stdio.h tệp tiêu đề.

Bây giờ, hãy xem cú pháp để tạo tệp mới hoặc mở tệp

file = fopen(“file_name”, “mode”)

Đây là cú pháp chung cho cả việc mở và tạo tệp trong C.

Tham số

tên_tệp - Là một chuỗi chỉ định tên của tệp sẽ được mở hoặc tạo bằng phương thức fopen. mode:Nó là một chuỗi (thường là một ký tự đơn) chỉ định chế độ mà tệp sẽ được mở. Có nhiều chế độ khác nhau có sẵn để mở tệp trong C, chúng ta sẽ tìm hiểu về tất cả chúng ở phần sau của bài viết này.

Khi nào một tệp sẽ được tạo?

Hàm fopen sẽ tạo một tệp mới khi nó không tìm thấy bất kỳ tệp nào có tên được chỉ định ở vị trí đã chỉ định. Ngoài ra, nếu tệp được tìm thấy, tệp sẽ được mở với chế độ được chỉ định.

Hãy xem ví dụ có thể làm cho khái niệm rõ ràng, Giả sử chúng ta đang mở một tệp có tên hello.txt bằng cách sử dụng hàm fopen. Sau đây sẽ là tuyên bố,

file = fopen(“hello.txt”, “w”)

Thao tác này sẽ tìm kiếm tệp có tên hello.txt trong thư mục hiện tại. Nếu tệp tồn tại, nó sẽ mở tệp, nếu không nó sẽ tạo một tệp mới có tên “hello.txt” và mở nó bằng chế độ ghi (được chỉ định bằng cách sử dụng “w”).

Bây giờ, hãy xem tất cả các loại chế độ có sẵn để chúng tôi đọc hoặc ghi tệp bằng C và xem các đoạn mã sẽ hiển thị các lần chạy mã mẫu.

Chế độ =“r” - mở để đọc, chế độ này sẽ mở tệp chỉ với mục đích đọc, tức là chỉ có thể xem nội dung, không thể thực hiện gì khác như chỉnh sửa đối với nó.

Chế độ này không thể tạo tệp mới và open () trả về NULL , nếu chúng tôi cố gắng tạo tệp mới bằng chế độ này.

Ví dụ

#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;
}

Đầu ra

File opened successfully in read mode

Chúng tôi đã tạo một tệp có tên hello.txt trong thư mục hiện tại của chúng tôi nhưng nếu chúng tôi cố gắng truy cập tệp khác thì chúng tôi sẽ nhận được “Tệp không có mặt! không thể tạo tệp mới bằng chế độ r ”làm đầu ra.

Chế độ =“rb” - mở để đọc ở chế độ nhị phân, chế độ này sẽ chỉ mở tệp để đọc ở chế độ nhị phân, tức là chỉ có thể xem nội dung và không thể thực hiện bất kỳ điều gì khác như chỉnh sửa đối với nó.

Chế độ này không thể tạo tệp mới và open () trả về NULL , nếu chúng tôi cố gắng tạo tệp mới bằng chế độ này.

Ví dụ

#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;
}

Đầu ra

Tệp không có mặt! không thể tạo tệp mới bằng chế độ rb

Chế độ =“w” - chỉ mở để ghi, chế độ này sẽ mở tệp nếu có trong thư mục hiện tại chỉ để ghi tức là không thể thực hiện thao tác đọc. Nếu tệp không có trong thư mục hiện tại, chương trình sẽ tạo một tệp mới và mở tệp đó để ghi.

Nếu chúng tôi mở một tệp có chứa một số văn bản trong đó, nội dung đó sẽ bị ghi đè.

Ví dụ

#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;
}

Đầu ra

File opened successfully in write mode or a new file is created

Bạn có thể thấy ở đây, chúng tôi đã thử mở tệp “helo.txt” mà không có trong thư mục, hàm vẫn trả về thông báo thành công vì nó đã tạo tệp có tên “helo.txt”.

Chế độ =“wb” - mở để ghi ở chế độ nhị phân, chế độ này sẽ mở tệp nếu có trong thư mục hiện tại để ghi ở chế độ nhị phân, tức là không thể thực hiện thao tác đọc. Nếu tệp không có trong thư mục hiện tại, chương trình sẽ tạo một tệp mới và mở tệp đó để ghi ở chế độ nhị phân.

Nếu chúng tôi mở một tệp có chứa một số văn bản trong đó, nội dung đó sẽ bị ghi đè.

Ví dụ

#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;
}

Đầu ra

Tệp được mở thành công khi ghi ở chế độ nhị phân hoặc tệp mới được tạo

Chế độ =“a” - open for append only, chế độ này sẽ mở tệp nếu có trong thư mục hiện tại để ghi, tức là không thể thực hiện thao tác đọc. Nếu tệp không có trong thư mục hiện tại, chương trình sẽ tạo một tệp mới và mở tệp đó để ghi. Nếu chúng tôi mở một tệp có chứa một số văn bản trong đó, nội dung sẽ không bị ghi đè; thay vào đó, văn bản mới sẽ được thêm vào sau văn bản hiện có trong tệp.

Ví dụ

#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;
}

Đầu ra

File opened successfully in append mode or a new file is created

Chế độ =“ab” - open for append in binary, chế độ này sẽ mở tệp nếu có trong thư mục hiện tại để ghi ở dạng nhị phân, tức là không thể thực hiện thao tác đọc. Nếu tệp không có trong thư mục hiện tại, chương trình sẽ tạo một tệp mới và mở tệp đó để ghi dưới dạng nhị phân.

Nếu chúng tôi mở một tệp có chứa một số văn bản trong đó, nội dung sẽ không bị ghi đè; thay vào đó, văn bản mới sẽ được thêm vào sau văn bản hiện có trong tệp.

Ví dụ

#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;
}

Đầu ra

File opened successfully in append in binary mode or a new file is created

Chế độ =“r +” - mở để đọc và ghi cả hai, chế độ này sẽ mở tệp cho cả mục đích đọc và ghi, tức là có thể thực hiện cả thao tác đọc và ghi đối với tệp.

Chế độ này không thể tạo tệp mới và open () trả về NULL , nếu chúng tôi cố gắng tạo tệp mới bằng chế độ này.

Nếu chúng ta mở một tệp có chứa một số văn bản trong đó và viết một cái gì đó, nội dung đó sẽ bị ghi đè.

Ví dụ

#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;
}

Đầu ra

File opened successfully in read and write both

Chúng tôi đã tạo một tệp có tên hello.txt trong thư mục hiện tại của chúng tôi nhưng nếu chúng tôi cố gắng truy cập vào một tệp khác thì chúng tôi sẽ nhận được thông báo “Tệp không có mặt! không thể tạo tệp mới bằng chế độ r + ”làm đầu ra.

Chế độ =“rb +” - mở để đọc ở chế độ nhị phân, chế độ này sẽ chỉ mở tệp để đọc ở chế độ nhị phân, tức là chỉ có thể xem nội dung và không thể thực hiện bất kỳ điều gì khác như chỉnh sửa đối với nó.

Chế độ này không thể tạo tệp mới và open () trả về NULL, nếu chúng tôi cố gắng tạo tệp mới bằng chế độ này.

Nếu chúng ta mở một tệp có chứa một số văn bản trong đó và viết một cái gì đó, nội dung đó sẽ bị ghi đè.

Ví dụ

#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;
}

Đầu ra

The file is not present! cannot create a new file using rb+ mode

Chế độ =“w” - Mở để ghi và đọc, chế độ này sẽ mở tệp nếu có trong thư mục hiện tại cho cả thao tác ghi và đọc. Nếu tệp không có trong thư mục hiện tại, chương trình sẽ tạo một tệp mới và mở tệp để đọc và ghi.

Nếu chúng tôi mở một tệp có chứa một số văn bản trong đó, nội dung đó sẽ bị ghi đè.

Ví dụ

#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;
}

Đầu ra

File opened successfully in read-write mode or a new file is created

Bạn có thể thấy ở đây, chúng tôi đã thử mở tệp “helo.txt” mà không có trong thư mục, hàm vẫn trả về thông báo thành công vì nó đã tạo tệp có tên “helo.txt”.

Mode =“wb +”:mở để ghi và đọc ở chế độ nhị phân, chế độ này sẽ mở tệp nếu có trong thư mục hiện tại để ghi và đọc trong

chế độ nhị phân. Nếu tệp không có trong thư mục hiện tại, chương trình sẽ tạo một tệp mới và mở tệp để đọc và ghi ở chế độ nhị phân, nếu chúng ta mở tệp có chứa một số văn bản trong đó, nội dung sẽ bị ghi đè.

Ví dụ

#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;
}

Đầu ra

File opened successfully in read-write in binary mode or a new file is created

Chế độ =“a +” - open để đọc và thêm vào, chế độ này sẽ mở tệp nếu có trong thư mục hiện tại để đọc và ghi. Nếu tệp không có trong thư mục hiện tại, chương trình sẽ tạo một tệp mới và mở tệp để đọc và ghi.

Nếu chúng tôi mở một tệp có chứa một số văn bản trong đó, nội dung sẽ không bị ghi đè; thay vào đó, văn bản mới sẽ được thêm vào sau văn bản hiện có trong tệp.

Ví dụ

#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;
}

Đầu ra

Tệp được mở thành công ở chế độ đọc-nối thêm hoặc tệp mới được tạo

Chế độ =“ab +” - open để đọc và nối thêm ở dạng nhị phân, chế độ này sẽ mở tệp nếu có trong thư mục hiện tại để đọc và ghi ở dạng nhị phân. Nếu tệp không có trong thư mục hiện tại, chương trình sẽ tạo một tệp mới và mở tệp đó để đọc và ghi ở dạng nhị phân. Nếu chúng tôi mở một tệp có chứa một số văn bản trong đó, nội dung sẽ không bị ghi đè; thay vào đó, văn bản mới sẽ được thêm vào sau văn bản hiện có trong tệp.

Ví dụ

#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;
}

Đầu ra

File opened successfully in read-append mode or a new file is created

Đọc dữ liệu từ một tệp hiện có

Chúng ta có thể đọc nội dung của một tệp trong c bằng cách sử dụng các hàm fscanf () và fgets () và fgetc (). Tất cả đều được sử dụng để đọc nội dung của tệp. Hãy xem hoạt động của từng hàm -

fscanf ()

Hàm fscanf () được sử dụng để đọc các chuỗi ký tự từ tệp. Nó trả về EOF, khi tất cả nội dung của tệp được nó đọc.

Cú pháp

int fscanf(FILE *stream, const char *charPointer[])

Tham số

FILE *stream: the pointer to the opened file.
const char *charPointer[]: string of character.

Ví dụ

#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;
}

Đầu ra

LearnprogrammingattutorialsPoint

fgets ()

Hàm fget () trong C được sử dụng để đọc chuỗi từ luồng.

Cú pháp

char* fgets(char *string, int length, FILE *stream)

Tham số

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.

Ví dụ

#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;
}

Đầu ra

Learn programming at tutorials Point

fgetc ()

Hàm fgetc () trong C được sử dụng để trả về một ký tự duy nhất từ ​​tệp. Nó lấy một ký tự từ tệp và trả về EOF ở cuối tệp.

Cú pháp

char* fgetc(FILE *stream)

Tham số

FILE *stream: It is the pointer to the opened file.

Ví dụ

#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;
}

Đầu ra

Learn programming at tutorials Point

Ghi dữ liệu vào tệp trong C

Chúng ta có thể ghi dữ liệu vào tệp trong C bằng các hàm fprintf (), fputs (), fputc (). Tất cả đều được sử dụng để ghi nội dung vào tệp.

Hãy xem hoạt động của từng chức năng -

fprintf ()

Hàm fprintf () được sử dụng để ghi dữ liệu vào tệp. Nó ghi một tập hợp các ký tự trong một tệp.

Cú pháp

int fprintf(FILE *stream, char *string[])

Tham số

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.

Ví dụ

#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;
}

Đầu ra

Write operation successful

fputf ()

Hàm fputf () trong C có thể được sử dụng để ghi vào tệp. Nó được sử dụng để ghi một dòng (dòng ký tự) vào tệp.

Cú pháp

int fputs(const char *string, FILE *stream)

Tham số

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.

Ví dụ

#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;
}

Đầu ra

String written to the file successfully…

fputc ()

Hàm fputc () được sử dụng để ghi một ký tự vào tệp.

Cú pháp

int fputc(char character , FILE *stream)

Tham số

Ký tự
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.

Ví dụ

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "w")){
      fputc('T', file);
   }
   fclose(file);
   return 0;
}

Đầu ra

‘T’ is written to the file.

fclose ()

Hàm fclose () được sử dụng để đóng tệp đang mở. Chúng ta nên đóng tệp sau khi thực hiện các thao tác trên nó để lưu các thao tác mà chúng ta đã áp dụng cho nó.

Cú pháp

fclose(FILE *stream)

Tham số

FILE for *stream: It is the pointer to the opened file.

Ví dụ

#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;
}

Đầu ra

LearnprogrammingatTutorialsPoint

Tệp chứa

Learn programming at Tutorials PointHello