Trong hướng dẫn này, bạn sẽ tìm hiểu về xử lý tệp trong C. Bạn sẽ học cách xử lý I / O tiêu chuẩn trong C bằng cách sử dụng fprintf (), fscanf (), fread (), fwrite (), fseek (), v.v. ví dụ.
Một tập tin là một thùng chứa trong các thiết bị lưu trữ máy tính được sử dụng để lưu trữ dữ liệu.
Tại sao xử lý các tập tin là cần thiết?
Khi một chương trình bị chấm dứt, toàn bộ dữ liệu sẽ bị mất. Lưu trữ trong một tệp sẽ bảo vệ dữ liệu của bạn ngay cả khi chương trình kết thúc.
Nếu bạn phải nhập một số lượng lớn dữ liệu, sẽ mất rất nhiều thời gian để nhập tất cả chúng.
Tuy nhiên, nếu bạn có một tệp chứa tất cả dữ liệu, bạn có thể dễ dàng truy cập nội dung của tệp bằng một vài lệnh trong C.
Bạn có thể dễ dàng di chuyển dữ liệu của mình từ máy tính này sang máy tính khác mà không có bất kỳ thay đổi nào.
Các loại tệp
Khi xử lý tệp, có hai loại tệp bạn nên biết:
- Tập tin văn bản
- Tệp nhị phân
1. Tệp văn bản
Các tệp văn bản là các tệp .txt bình thường. Bạn có thể dễ dàng tạo các tệp văn bản bằng bất kỳ trình soạn thảo văn bản đơn giản nào như Notepad.
Khi bạn mở các tệp đó, bạn sẽ thấy tất cả nội dung trong tệp dưới dạng văn bản thuần túy. Bạn có thể dễ dàng chỉnh sửa hoặc xóa nội dung.
Họ mất nỗ lực tối thiểu để duy trì, dễ đọc và cung cấp ít bảo mật nhất và chiếm không gian lưu trữ lớn hơn.
2. Tệp nhị phân
Các tệp nhị phân chủ yếu là các tệp .bin trong máy tính của bạn.
Thay vì lưu trữ dữ liệu trong văn bản thuần túy, họ lưu trữ dữ liệu ở dạng nhị phân (0 và 1).
Chúng có thể chứa một lượng dữ liệu cao hơn, không dễ đọc và cung cấp bảo mật tốt hơn các tệp văn bản.
Hoạt động tập tin
Trong C, bạn có thể thực hiện bốn thao tác chính trên tệp, dưới dạng văn bản hoặc nhị phân:
- Tạo một tệp mới
- Mở một tập tin hiện có
- Đóng một tập tin
- Đọc và ghi thông tin vào một tập tin
- Làm việc với các tập tin
- Khi làm việc với các tệp, bạn cần khai báo một con trỏ của loại tệp. Tuyên bố này là cần thiết để liên lạc giữa các tập tin và chương trình.
FILE *fptr;
Mở tệp - để tạo và chỉnh sửa
Việc mở tệp được thực hiện bằng hàm fopen () được xác định trong tệp tiêu đề stdio.h.
Cú pháp mở tệp trong I / O tiêu chuẩn là:
ptr = fopen("fileopen","mode");
Ví dụ:
fopen("E:\\cprogram\\newprogram.txt","w");fopen("E:\\cprogram\\oldprogram.bin","rb");
Giả sử tệp newprogram.txt không tồn tại ở vị trí E: \ cprogram. Hàm đầu tiên tạo một tệp mới có tên newprogram.txt và mở nó để ghi theo chế độ 'w'.
Chế độ viết cho phép bạn tạo và chỉnh sửa (ghi đè) nội dung của tệp.
Bây giờ, giả sử tệp nhị phân thứ hai oldprogram.bin tồn tại ở vị trí E: \ cprogram. Hàm thứ hai mở tệp hiện có để đọc ở chế độ nhị phân 'rb'.
Chế độ đọc chỉ cho phép bạn đọc tệp, bạn không thể ghi vào tệp.
Đóng tệp
Tập tin (cả văn bản và nhị phân) nên được đóng lại sau khi đọc / ghi.
Đóng tệp được thực hiện bằng hàm fclose ().
fclose(fptr);
Đọc và ghi vào một tệp văn bản
Để đọc và ghi vào tệp văn bản, chúng tôi sử dụng các hàm fprintf () và fscanf ().
Ví dụ 1: Ghi vào tệp văn bản
#include <stdio.h>#include <stdlib.h>int main(){int num;FILE *fptr;// use appropriate location if you are using MacOS or Linuxfptr = fopen("C:\\program.txt","w");if(fptr == NULL){printf("Error!");exit(1);}printf("Enter num: ");scanf("%d",&num);fprintf(fptr,"%d",num);fclose(fptr);return 0;}
Ví dụ 2: Đọc từ tệp văn bản
#include <stdio.h>#include <stdlib.h>int main(){int num;FILE *fptr;if ((fptr = fopen("C:\\program.txt","r")) == NULL){printf("Error! opening file");// Program exits if the file pointer returns NULL.exit(1);}fscanf(fptr,"%d", &num);printf("Value of n=%d", num);fclose(fptr);return 0;}
Đọc và ghi vào tệp nhị phân
Các hàm fread () và fwrite () được sử dụng để đọc và ghi vào một tệp trên đĩa tương ứng trong trường hợp tệp nhị phân.
Ghi vào tệp nhị phân
Để ghi vào tệp nhị phân, bạn cần sử dụng hàm fwrite (). Các hàm có bốn đối số:
- địa chỉ dữ liệu được ghi trong đĩa
- kích thước của dữ liệu được ghi vào đĩa
- số loại dữ liệu đó
- con trỏ đến tập tin mà bạn muốn viết
fwrite(addressData, sizeData, numbersData, pointerToFile);
Ví dụ 3: Ghi vào tệp nhị phân bằng fwrite ()
#include <stdio.h>#include <stdlib.h>struct threeNum{int n1, n2, n3;};int main(){int n;struct threeNum num;FILE *fptr;if ((fptr = fopen("C:\\program.bin","wb")) == NULL){printf("Error! opening file");// Program exits if the file pointer returns NULL.exit(1);}for(n = 1; n < 5; ++n){num.n1 = n;num.n2 = 5*n;num.n3 = 5*n + 1;fwrite(&num, sizeof(struct threeNum), 1, fptr);}fclose(fptr);return 0;}
No comments:
Post a Comment