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