Hàm Fwirte Và Fread Trong C - Lập Trình Từ Đầu

Ta đã biết hai hàm fprintffscanf để đọc, ghi dữ liệu từ một tệp văn bản. Trong trường hợp của tệp nhị phân ta cũng có hai hàm mới có cùng chức năng tương tự (đọc ghi tệp) khi thao tác với tệp nhị phân đó là hàm fwirtefread

1.Hàm fwirte ghi dữ liệu vào file nhị phân

Khi thao tác ghi với file nhị phân, ta hoàn toàn có thể ghi một biến, một mảng hay một kiểu cấu trúc vào file nhị phân đó thông qua việc sử dụng hàm fwirte.

Cú pháp:

fwrite(const void *ptr, size_t size, size_t n, FILE *fp);

Trong đó:

  • ptr trỏ đến khối bộ nhớ chứa các mục dữ liệu sẽ được ghi.
  • size chỉ định số byte của mỗi mục sẽ được ghi.
  • n số mục sẽ được viết.
  • fp là một con trỏ đến tệp nơi các mục dữ liệu sẽ được ghi.

Khi thực hiện thành công, hàm trên trả về số lượng các mục được ghi thành công vào tệp. Khi có lỗi sảy ra, nó trả về một số nhỏ hơn n.

Để hiểu rõ hơn, cũng xét các ví dụ sau tôi sẽ sử dụng ghi một biến, mảng và struct vào file nhị phân.

Ghi một biến vào file nhị phân:

#include<stdio.h> int main () { //con tro file FILE *fp; float pi = 3.14; //mo file voi che do ghi nhi phan wb fp = fopen( "sopi.bin" , "wb" ); //thuc hien ghi bien str vao file fwrite(&pi , 1 , sizeof(pi) , fp ); //dong file fclose(fp); }

Ghi một mảng vào file nhị phân:

#include<stdio.h> int main () { //con tro file FILE *fp; int arr[5] = {101, 203, 303, 404, 505}; //mo file voi che do ghi nhi phan wb fp = fopen( "soluong.bin" , "wb" ); //thuc hien ghi mang arr vao file fwrite(arr, sizeof(arr), 1, fp); //dong file fclose(fp); }

Ghi một struct vào file nhị phân

#include <stdio.h> struct ngaysinh { int ngay; int thang; int nam; }; int main() { struct ngaysinh n1; // con tro file FILE *fp; //mo file ngaysinh.bin voi che do mo nhi phan wb fp = fopen("ngaysinh.bin","wb"); //them du lieu vao struct n1.ngay = 15; n1.thang = 9; n1.nam = 2021; //ghi du lieu fwrite(&n1, sizeof(struct ngaysinh), 1, fp); //dong file fclose(fp); } 2.Hàm fread đọc dữ liệu nhị phân

Nếu như ta có fscanf để đọc file văn bản thì fread là hàm để đọc dữ liệu trong file nhị phân.

Cú pháp:

fread(const void *ptr, size_t size, size_t n, FILE *fp);

Các đối số truyền vào fread tương tự như hàm fwirte ở trên vì thế bạn đọc có thể đọc lại ở phần trên!

Ở phần 1 trên, ta đã sử dụng fwirte để ghi dữ liệu vào file nhị phân. Bây giờ, tôi sẽ thực hiện đọc dữ liệu ở những file đó ra bằng hàm fread.

Đọc giá trị biến có trong file nhị phân

#include<stdio.h> int main () { //con tro file FILE *fp; //khai bao bien chua du lieu float val; //mo file voi che do doc nhi phan rb fp = fopen( "sopi.bin" , "rb" ); //thuc hien doc du lieu va gan vao bien val fread(&val , 1 , sizeof(val) , fp ); //hien thi ket qua doc printf("%f", val); //dong file fclose(fp); }
Du lieu doc duoc la: 3.140000

Đọc giá trị mảng có trong file nhị phân

#include<stdio.h> int main () { //con tro file FILE *fp; //khai bao mang chua du lieu int val[5]; //mo file voi che do doc nhi phan rb fp = fopen( "soluong.bin" , "rb" ); //thuc hien doc du lieu va gan vao mang val fread(val, sizeof(val), 1, fp); //hien thi du lieu vua doc printf("Du lieu doc duoc la: \n"); printf("%d \n", val[0]); printf("%d \n", val[1]); printf("%d \n", val[2]); printf("%d \n", val[3]); printf("%d \n", val[4]); //dong file fclose(fp); }
Du lieu doc duoc la:

101

203

303

404

505

Đọc struct có trong file nhị phân

#include <stdio.h> struct ngaysinh { int ngay; int thang; int nam; }; int main() { struct ngaysinh val; // con tro file FILE *fp; //mo file ngaysinh.bin voi che do doc nhi phan rb fp = fopen("ngaysinh.bin","rb"); //doc du lieu va gan vao val fread(&val, sizeof(struct ngaysinh), 1, fp); //hien thi du lieu printf("Du lieu doc duoc la: \n"); printf("%d \n", val.ngay); printf("%d \n", val.thang); printf("%d \n", val.nam); //dong file fclose(fp); }
Du lieu doc duoc la:

15

9

2021

Nhận xét:

  • Mặc dù hai hàm này chủ yếu được thao tác với tệp nhị phân, tuy nhiên trong một số trường hợp ta vẫn sử dụng chúng cho đọc ghi dữ liệu từ tệp văn bản!
  • Hàm đọc dữ liệu nhị phân fread khi được thực thi sẽ không làm mất hay, xóa bỏ dữ liệu có trong tệp

Từ khóa » Cách Dùng Hàm Fwrite