C Files I / O: Tạo, mở, đọc, ghi và đóng tệp

Mục lục:

Anonim

C Quản lý tệp

Tệp có thể được sử dụng để lưu trữ một khối lượng lớn dữ liệu liên tục. Giống như nhiều ngôn ngữ khác, 'C' cung cấp các chức năng quản lý tệp sau đây,

  1. Tạo tệp
  2. Mở một tập tin
  3. Đọc một tập tin
  4. Ghi vào một tệp
  5. Đóng tệp

Sau đây là các chức năng quản lý tệp quan trọng nhất có sẵn trong 'C,'

chức năng mục đích
fopen () Tạo tệp hoặc mở tệp hiện có
fclose () Đóng tệp
fprintf () Ghi một khối dữ liệu vào một tệp
fscanf () Đọc dữ liệu khối từ một tệp
getc () Đọc một ký tự từ một tệp
putc () Ghi một ký tự vào tệp
getw () Đọc một số nguyên từ một tệp
putw () Ghi một số nguyên vào một tệp
fseek () Đặt vị trí của con trỏ tệp đến một vị trí được chỉ định
ftell () Trả về vị trí hiện tại của con trỏ tệp
tua lại () Đặt con trỏ tệp ở đầu tệp

Trong hướng dẫn này, bạn sẽ học-

  • Cách tạo tệp
  • Cách đóng tệp:
  • Ghi vào tệp
    • Hàm fputc ():
    • Hàm fputs ():
    • hàm fprintf ():
  • Đọc dữ liệu từ một tệp
  • Đọc và ghi tệp tương tác với getc và putc

Cách tạo tệp

Bất cứ khi nào bạn muốn làm việc với một tệp, bước đầu tiên là tạo một tệp. Tệp không là gì ngoài không gian trong bộ nhớ nơi dữ liệu được lưu trữ.

Để tạo tệp trong chương trình 'C', cú pháp sau được sử dụng,

FILE *fp;fp = fopen ("file_name", "mode");

Trong cú pháp trên, tệp là một cấu trúc dữ liệu được định nghĩa trong thư viện chuẩn.

fopen là một hàm tiêu chuẩn được sử dụng để mở một tệp.

  • Nếu tệp không có trên hệ thống, thì tệp sẽ được tạo và sau đó được mở.
  • Nếu một tệp đã có trên hệ thống, thì tệp đó sẽ được mở trực tiếp bằng chức năng này.

fp là một con trỏ tệp trỏ đến tệp kiểu.

Bất cứ khi nào bạn mở hoặc tạo một tệp, bạn phải chỉ định những gì bạn sẽ làm với tệp. Một tệp trong lập trình 'C' có thể được tạo hoặc mở cho mục đích đọc / ghi. Một chế độ được sử dụng để chỉ định xem bạn có muốn mở tệp cho bất kỳ mục đích nào dưới đây hay không. Sau đây là các loại chế độ khác nhau trong lập trình 'C' có thể được sử dụng khi làm việc với tệp.

Chế độ tệp Sự miêu tả
r Mở một tệp để đọc. Nếu tệp ở chế độ đọc, thì không có dữ liệu nào bị xóa nếu tệp đã có trên hệ thống.
w Mở một tệp để viết. Nếu một tệp đang ở chế độ ghi, thì một tệp mới sẽ được tạo nếu một tệp hoàn toàn không tồn tại. Nếu một tệp đã có trên hệ thống, thì tất cả dữ liệu bên trong tệp sẽ bị cắt bớt và nó được mở cho mục đích ghi.
a Mở tệp ở chế độ nối thêm. Nếu tệp ở chế độ nối thêm, thì tệp đó sẽ được mở. Nội dung trong tệp không thay đổi.
r + mở để đọc và viết từ đầu
w + mở để đọc và ghi, ghi đè lên một tệp
a + mở để đọc và ghi, thêm vào tệp

Trong cú pháp đã cho, tên tệp và chế độ được chỉ định dưới dạng chuỗi do đó chúng phải luôn được đặt trong dấu ngoặc kép.

Thí dụ:

#include int main() {FILE *fp;fp = fopen ("data.txt", "w");}

Đầu ra:

Tệp được tạo trong cùng một thư mục mà bạn đã lưu mã của mình.

Bạn có thể chỉ định đường dẫn mà bạn muốn tạo tệp của mình

#include int main() {FILE *fp;fp = fopen ("D://data.txt", "w");}

Cách đóng tệp

Người ta phải luôn đóng tệp bất cứ khi nào các thao tác trên tệp kết thúc. Nó có nghĩa là nội dung và liên kết đến tệp đã bị chấm dứt. Điều này ngăn chặn việc vô tình làm hỏng tệp.

'C' cung cấp hàm fclose để thực hiện thao tác đóng tệp. Cú pháp của fclose như sau,

fclose (file_pointer);

Thí dụ:

FILE *fp;fp = fopen ("data.txt", "r");fclose (fp);

Hàm fclose nhận một con trỏ tệp làm đối số. Sau đó, tệp được liên kết với con trỏ tệp được đóng với sự trợ giúp của hàm fclose. Nó trả về 0 nếu đóng thành công và EOF (cuối tệp) nếu có lỗi xảy ra khi đóng tệp.

Sau khi đóng tệp, con trỏ tệp tương tự cũng có thể được sử dụng với các tệp khác.

Trong lập trình 'C', các tệp sẽ tự động đóng khi chương trình kết thúc. Đóng tệp theo cách thủ công bằng cách viết hàm fclose là một phương pháp lập trình tốt.

Ghi vào tệp

Trong C, khi bạn ghi vào một tệp, các ký tự dòng mới '\ n' phải được thêm rõ ràng.

Thư viện stdio cung cấp các chức năng cần thiết để ghi vào tệp:

  • fputc (char, file_pointer) : Nó ghi một ký tự vào tệp được trỏ tới bởi file_pointer.
  • fputs (str, file_pointer) : Nó ghi một chuỗi vào tệp được trỏ đến bởi file_pointer.
  • fprintf (file_pointer, str, variable_lists) : Nó in một chuỗi vào tệp được trỏ đến bởi file_pointer. Chuỗi có thể tùy chọn bao gồm các chỉ định định dạng và danh sách các biến variable_lists.

Chương trình dưới đây cho biết cách thực hiện ghi vào tệp:

Hàm fputc ():

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

Đầu ra:

Chương trình trên ghi một ký tự vào tệp fputc_test.txt cho đến khi ký tự dòng tiếp theo "\ n" cho biết rằng câu đã được viết thành công. Quá trình này là lấy từng ký tự của mảng và ghi vào tệp.

  1. Trong chương trình trên, chúng ta đã tạo và mở một tệp có tên fputc_test.txt ở chế độ ghi và khai báo chuỗi của chúng ta sẽ được ghi vào tệp.
  2. Chúng tôi thực hiện thao tác ghi từng ký tự bằng cách sử dụng vòng lặp for và đặt từng ký tự vào tệp của chúng tôi cho đến khi gặp ký tự "\ n" thì tệp được đóng bằng hàm fclose.

Hàm fputs ():

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

ĐẦU RA:

  1. Trong chương trình trên, chúng ta đã tạo và mở một tệp có tên fputs_test.txt ở chế độ ghi.
  2. Sau khi chúng tôi thực hiện thao tác ghi bằng hàm fputs () bằng cách viết ba chuỗi khác nhau
  3. Sau đó, tệp được đóng bằng chức năng fclose.

hàm fprintf ():

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

ĐẦU RA:

  1. Trong chương trình trên, chúng tôi đã tạo và mở một tệp có tên fprintf_test.txt ở chế độ ghi.
  2. Sau khi thao tác ghi được thực hiện bằng hàm fprintf () bằng cách viết một chuỗi, sau đó tệp sẽ được đóng bằng hàm fclose.

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

Có ba chức năng khác nhau dành riêng cho việc đọc dữ liệu từ một tệp

  • fgetc (file_pointer): Nó trả về ký tự tiếp theo từ tệp được con trỏ tệp trỏ tới. Khi đến cuối tệp, EOF sẽ được gửi lại.
  • fgets (buffer, n, file_pointer): Nó đọc n-1 ký tự từ tệp và lưu chuỗi trong bộ đệm trong đó ký tự NULL '\ 0' được thêm vào làm ký tự cuối cùng.
  • fscanf (file_pointer, convert_specifiers, variable_adresses) : Nó được sử dụng để phân tích cú pháp và phân tích dữ liệu. Nó đọc các ký tự từ tệp và gán đầu vào cho một danh sách các con trỏ biến biến_biến_địa chỉ bằng cách sử dụng các chỉ định chuyển đổi. Hãy nhớ rằng cũng như với scanf, fscanf ngừng đọc một chuỗi khi gặp phải dấu cách hoặc dòng mới.

Chương trình sau minh họa việc đọc từ tệp fputs_test.txt bằng cách sử dụng các hàm fgets (), fscanf () và fgetc () tương ứng:

#include 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 pointerchar 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 pointerwhile ((c = getc(file_pointer)) != EOF) printf("%c", c);fclose(file_pointer);return 0;}

Kết quả:

----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. Trong chương trình trên, chúng ta đã mở tệp có tên "fprintf_test.txt" được viết trước đó bằng hàm fprintf () và nó chứa chuỗi "Học C với Guru99". Chúng tôi đọc nó bằng cách sử dụng hàm fgets () đọc từng dòng trong đó kích thước bộ đệm phải đủ để xử lý toàn bộ dòng.
  2. Chúng tôi mở lại tệp để đặt lại tệp con trỏ trỏ đến đầu tệp. Tạo các biến chuỗi khác nhau để xử lý từng từ riêng biệt. In các biến để xem nội dung của chúng. Fscanf () chủ yếu được sử dụng để trích xuất và phân tích dữ liệu từ một tệp.
  3. Mở lại tệp để đặt lại tệp con trỏ trỏ đến đầu tệp. Đọc dữ liệu và in nó từ ký tự tệp theo từng ký tự bằng cách sử dụng hàm getc () cho đến khi gặp câu lệnh EOF
  4. Sau khi thực hiện thao tác đọc tệp bằng các biến thể khác nhau, chúng tôi lại đóng tệp bằng hàm fclose.

Đọc và ghi tệp tương tác với getc và putc

Đây là những thao tác tập tin đơn giản nhất. Getc là viết tắt của ký tự get, và putc là viết tắt của ký tự đặt. Hai hàm này chỉ được sử dụng để xử lý một ký tự duy nhất tại một thời điểm.

Chương trình sau trình bày các hàm xử lý tệp trong lập trình 'C':

#include int main() {FILE * fp;char c;printf("File Handling\n");//open a filefp = fopen("demo.txt", "w");//writing operationwhile ((c = getchar()) != EOF) {putc(c, fp);}//close filefclose(fp);printf("Data Entered:\n");//readingfp = fopen("demo.txt", "r");while ((c = getc(fp)) != EOF) {printf("%c", c);}fclose(fp);return 0;}

Đầu ra:

  1. Trong chương trình trên, chúng ta đã tạo và mở một tệp có tên demo ở chế độ ghi.
  2. Sau khi thực hiện thao tác ghi, tệp sẽ được đóng bằng chức năng fclose.
  3. Chúng tôi đã mở lại một tệp hiện có chứa dữ liệu ở chế độ đọc. Vòng lặp while sẽ thực thi cho đến khi tìm thấy eof. Khi phần cuối của tệp được tìm thấy, hoạt động sẽ được kết thúc và dữ liệu sẽ được hiển thị bằng cách sử dụng hàm printf.
  4. Sau khi thực hiện thao tác đọc, tệp sẽ được đóng lại bằng chức năng fclose.

Tóm lược

  • Tệp là một không gian trong bộ nhớ, nơi dữ liệu được lưu trữ.
  • Lập trình 'C' cung cấp các chức năng khác nhau để xử lý một tệp.
  • Một cơ chế thao tác với tệp được gọi là quản lý tệp.
  • Một tệp phải được mở trước khi thực hiện các thao tác trên đó.
  • Một tệp có thể được mở ở chế độ đọc, ghi hoặc nối thêm.
  • Hàm getc và putc được sử dụng để đọc và viết một ký tự.
  • Hàm fscanf () cho phép đọc và phân tích dữ liệu từ một tệp
  • Chúng ta có thể đọc (sử dụng hàm getc ) toàn bộ tệp bằng cách lặp lại để bao phủ tất cả tệp cho đến khi gặp EOF
  • Chúng ta có thể ghi vào một tệp sau khi tạo tên của nó, bằng cách sử dụng hàm fprintf () và nó phải có ký tự dòng mới ở cuối văn bản chuỗi.