Trang chủLập trìnhLập trình C/C++Đọc ghi file trong ngôn ngữ lập trình C

Đọc ghi file trong ngôn ngữ lập trình C

Trong bài viết này, mình sẽ hướng dẫn bạn cách để làm việc với file sử dụng ngôn ngữ lập trình C. Một số hàm đọc ghi file trong C cơ bản như fprintf(), fscanf()….chúng ta cùng bắt đầu nhé.

Đọc ghi file để làm gì?

  • Dữ liệu được lưu ở biến của chương trình, và nó sẽ biến mất khi chương trình kết thúc. Sử dụng file để lưu trữ dữ liệu cần thiết để đảm bảo dữ liệu của chúng ta không bị mất ngay cả khi chương trình của chúng ta ngừng chạy.
  • Nếu chương trình của bạn có đầu vào(input) là lớn, bạn sẽ rất vất vả nếu phải nhập mỗi khi chạy. Thay vào đó, hãy lưu vào file và chương trình của bạn sẽ tự đọc mỗi lần khởi chạy

Có những loại file phổ biến nào?

Trước khi bạn làm việc với file, bạn nên biết về 2 kiểu file khác nhau sau đây:

  1. File văn bản – text files
  2. File nhị phân – binary file

File văn bản – text files

File văn bản là file thường có đuôi là .txt. Những file này bạn có thể dễ dàng tạo ra bằng cách dùng các text editer thông dụng như Notepad, Notepad++, Sublime Text,…

Khi bạn mở các file này bằng các text editer nói trên, bạn sẽ thấy được văn bản ngay và có thể dễ dàng thao tác sửa, xóa, thêm nội dung của file này.

Kiểu file này thuận tiện cho chúng ta trong việc sử dụng hàng ngày, nhưng nó sẽ kém bảo mật và cần nhiều bộ nhớ để lưu trữ hơn.

File nhị phân – Binary files

File nhị phân thường có đuôi mở rộng là .bin

Thay vì lưu trữ dưới dạng văn bản thuần thúy, các file này được lưu dưới dạng nhị phân, chỉ bao gồm các số 0 và 1. Bạn cũng sẽ thấy các con số này nếu cố mở nó bằng 1 text editer kể trên.

Loại file này giúp lưu trữ được dữ liệu với kích thước lớn hơn, không thể đọc bằng các text editer thông thường và thông tin lưu trữ ở loại file được bảo mật hơn so với file văn bản.

Các thao tác với file trong C

Khi làm việc với file, bạn cần khai báo 1 con trỏ kiểu FILE.

FILE *f;

Mở/Đóng file

Để mở file thì ta sử dụng hàm fopen() nằm trong thư viện stdio.h. Cú pháp của nó như sau:

	
f = fopen("fileopen","mode");

Ví dụ 1:

f = fopen("E:\\dayso.txt","w");

Ví dụ 2:

f = fopen("E:\\khachhang.bin","rb");

Tham số thứ nhất là đường dẫn file, tham số thứ 2 là chế độ mở file mode.

Các tham số của “mode”

ModeÝ nghĩa
rMở để đọc.
rbMở đọc theo chế độ binary.
wMở để ghi.
wbMở ghi theo chế độ binary.
aMở để ghi thêm dữ liệu vào cuối file.
abMở ở chế độ binary,
Dữ liệu sẽ được ghi vào cuối file.
r+Mở để đọc và ghi
rb+Mở để đọc và ghi ở chế độ binary.
w+Mở để đọc và ghi
wb+Mở để đọc và ghi ở chế độ binary..
a+Mở để đọc và bổ sung dữ liệu.
ab+Mở để đọc và bổ sung dữ liệu. chế độ binary.

Khi làm việc với tập tin hoàn tất, kể cả là file nhị phân hay file văn bản. Bạn cần đóng file sau khi làm việc với nó xong.

Việc đóng file đang mở có thể được thực hiện bằng cách dùng hàm fclose().

fclose(fptr); //Con trỏ FILE trỏ tới file cần được đóng.

Đọc/Ghi file văn bản trong C

Để làm việc với file văn bản, chúng ta sẽ sử dụng fprintf() và fscanf(), nó cũng làm việc tương tự như printf()scanf() nhưng thay vì đọc/ghi trên màn hình console lúc này sẽ đọc ghi từ file văn bản.

VD1. Ghi file sử dụng fprintf()

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   int num;
   FILE *f;
   f= fopen("D:\\dayso.txt","w");
 
   if(f== NULL)
   {
      printf("Error!");   
      exit(1);             
   }
   printf("Enter num: ");
   scanf("%d",&num);
 
   fprintf(f,"%d",num);
   fclose(f);
 
   return 0;
}

Chương trình nhận số num từ bàn phím và ghi vào file văn bản dayso.txt.

Sau khi bạn chạy chương trình này, bạn sẽ thấy file văn bản dayso.txt được tạo mới trong ổ D trên máy tính. Khi mở file này lên, sẽ thấy số mà bạn vừa nhập cho biến num kia.

Ví dụ 2: Đọc dữ liệu từ file text sử dụng fscanf()

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   int num;
   FILE *f;
 
   if ((f= fopen("C:\\dayso.txt","r")) == NULL){
       printf("Error! opening file");
       exit(1);
   }
 
   fscanf(f,"%d", &num);
 
   printf("Value of n=%d", num);
   fclose(f); 
   
   return 0;
}

Chương trình này sẽ đọc giá trị số được lưu trong file dayso.txt mà chương trình ở VD1 vừa tạo ra và in lên màn hình.

Đọc/Ghi file nhị phân trong C

Các hàm fread() và fwrite() trong C được sử dụng để đọc và ghi file trong C ở dạng nhị phân.

Ví dụ 3: Ghi file nhị phân

#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");
 
       // Dừng chương trình nếu con trỏ đọc file trả về 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;
}

Ghi vào file nhị phân, cần sử dụng hàm fwrite (). Hàm này có bốn tham số:

  1. Đường dẫn đến file cần ghi
  2. Kích thước của dữ liệu
  3. Số loại dữ liệu như vậy
  4. Con trỏ đến file mà bạn muốn ghi

Ví dụ 4: Đọc file nhị phân

#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");
 
       // Dừng chương trình nếu con trỏ đọc file trả về 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;
}

Đọc file nhị phân thì ta sử dụng hàm fread(), hàm này cũng có bốn tham số như hàm fwrite.

0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?


0
Giáo sư! có thể ném gạch bên dưới nhé!x
()
x