Trong bài bác này bọn họ sẽ mày mò cách phát âm ghi file trong C bằng cách sử dụng các hàm xử lý file: fprintf(), fscanf(), fread(), fwrite(), fseek().

Bạn đang xem: Đọc và ghi file trong c++

*


*

Đa số sinh viên vn học lập trình C là để luyện bốn duy logic, cũng đều có một số người dùng làm xây dựng ứng dụng thực tế nên việc thao tác với file là rất đặc trưng khi cần tàng trữ dữ liệu mà không yêu cầu hệ cai quản trị CSDL.

1. Lý do cần tàng trữ dữ liệu lên file?

Khi chương trình hoàn thành thì toàn thể dữ liệu có khả năng sẽ bị mất, vì chưng vậy nếu khách hàng lưu vào file thì vẫn xem lại được thông tin.

Hoặc nếu khách hàng cần nhập tài liệu lớn thì vẫn mấ tương đối nhiều thời gian. Nhưng nếu bạn lưu nó vào một trong những file có kết cấu nhất quán, và cần sử dụng lệnh hiểu ghi file trong C thì câu hỏi xử lý sẽ nhanh gọn lẹ hơn vô cùng nhiều.

Bạn cũng có thể dễ dàng copy tài liệu từ sản phẩm này sang sản phẩm công nghệ khác.

Tuy nhiên việc lưu trữ này là không an toàn, bởi fan dùng có thể mở tệp tin ra gọi một cách dễ dàng, chứ không y như lưu trữ vào các hệ quản lí trị csdl như SQL hệ thống / MySQL / Oracle.

2. Bao hàm loại file thịnh hành nào?

Khi cách xử trí file vào C thì các bạn cần suy xét hai loại file như sau:

Text filesBinary files

Text file

Là một file có phần không ngừng mở rộng là txt, nó là file thông thường nên có thể mở nó bởi những luật đọc tệp tin text đơn giản như notepad.

Khi bạn mở các file đó, các bạn sẽ thấy toàn bộ nội dung trong tệp dưới dạng văn phiên bản thuần túy. Chúng ta có thể dễ dàng sửa đổi hoặc xóa nội dung.

Chúng rất cần phải tối ưu sẽ giúp đỡ dễ đọc, bảo mật, cũng như chiếm ít dung tích lưu trữ.

Binary files

Là gần như file bao gồm phần đuôi không ngừng mở rộng là .bin cùng nó có nhiều trong sản phẩm công nghệ tính của doanh nghiệp đấy.

Thay vì lưu trữ ở dạng văn bạn dạng thuần túy thì họ lưu trữ ở dạng nhị phân (0 với 1), bởi vậy kích cỡ file sẽ khá dài, nhưng lại bù lại dữ liệu sẽ không thể đọc bằng mắt hay được nên an ninh hơn.

3. Các làm việc cơ phiên bản với tệp tin trong C

Bây tiếng ta sẽ thực hành một vài làm việc với tệp tin thông dụng độc nhất nhé.

Khai báo nhỏ trỏ dạng hình FILE

Khi thao tác với tệp tin thì chúng ta phải khai báo bé trỏ đẳng cấp FILE, nó vẫn trỏ cho file buộc phải đọc trên máy vi tính và giúp trình biên dịch hiểu ghi dữ liệu với file.


FILE *fptr;

Mở một file

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


ptr = fopen("fileopen","mode");
Ví dụ:


fopen("E:\cprogram\newprogram.txt","w");fopen("E:\cprogram\oldprogram.bin","rb");
Đường dẫn mở file rất rõ ràng ràng. Nhưng chế độ đọc tệp tin mode thì bạn hãy xem bảng dưới đây.

ModeMeaning of Mode
rMở nhằm đọc.
rbMở đọc theo chế độ binary.
wMở nhằm ghi.
wbMở ghi theo chính sách binary.
aMở để ghi thêm dữ liệu vào cuối file.
abMở ở chính sách binary,Dữ liệu sẽ được ghi vào thời điểm cuối file.

Xem thêm: Tổng Hợp Tài Liệu Tự Học Kế Toán Thực Hành Từ Cơ Bản Tới Nâng Cao 7/2021

r+Mở để đọc cùng ghi
rb+Mở nhằm đọc với ghi ở chế độ binary.
w+Mở nhằm đọc với ghi
wb+Mở để đọc và ghi ở chế độ binary..
a+Mở để đọc và bổ sung dữ liệu.
ab+Mở nhằm đọc và bổ sung cập nhật dữ liệu. Cơ chế binary.

Đóng kết nối

Sau khi mở file và thực hiện xong thì chúng ta nên đóng file lại bằng phương pháp sau:


fclose(fptr);
Trong đó fptr là con trỏ của file vẫn xử lý.

4. Đọc cùng ghi vào file text

Để đọc và ghi tài liệu vào file text thì ta áp dụng hai hàm fprintf() và fscanf().

Ví dụ: Ghi dữ liệu vào tệp tin text


#include #include int main() int num; tệp tin *fptr; fptr = 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;
Chương trình này lấy một số từ người tiêu dùng và tàng trữ trong tệp tin program.txt.

Sau khi biên dịch với chạy công tác này, chúng ta cũng có thể thấy tệp tin program.txt được tạo thành trong ổ C của sản phẩm tính. Khi chúng ta mở file chúng ta cũng có thể thấy số nguyên các bạn đã nhập.

Ví dụ 2: Đọc dữ liệu từ file text


#include #include int main() int num; file *fptr; if ((fptr = fopen("C:\program.txt","r")) == NULL) printf("Error! opening file"); exit(1); fscanf(fptr,"%d", &num); printf("Value of n=%d", num); fclose(fptr); return 0;
Chương trình này phát âm số nguyên gồm trong tệp tin program.txt cùng in ra màn hình.

Nếu các bạn đã tạo thành công xuất sắc file từ ví dụ 1 thì khi chạy chương trình này sẽ nhận được số nguyên chúng ta đã nhập.

Các hàm khác như fgetchar (), fputc (), v.v. Sử dụng tương tự theo giải pháp này.

4. Đọc cùng ghi tài liệu vào tệp tin binary

Hai hàm fread() cùng fwrite() được dùng để đọc cùng ghi vào file ở format nhị phân binary.

Ghi file nhị phân

Để ghi vào tệp tin nhị phân, bạn phải sử dụng hàm fwrite (). Hàm này có bốn tham số:

Đường dẫn đến file yêu cầu ghiKích thước của dữ liệuSố loại dữ liệu như vậyCon trỏ mang lại file mà bạn muốn ghi

fwrite(addressData, sizeData, numbersData, pointerToFile);
Ví dụ: Ghi tài liệu vào tệp tin nhị phân thực hiện ham ffwrite()


#include #include struct threeNum int n1, n2, n3;;int main(){ int n; struct threeNum num; tệp tin *fptr; if ((fptr = fopen("C:\program.bin","wb")) == NULL) printf("Error! opening file"); // Dừng công tác nếu nhỏ trỏ phát âm file trả về NULL. Exit(1); for(n = 1; n

Đọc tài liệu file nhị phân

Để phát âm file nhị phân thì ta áp dụng hàm fread(), hàm này cũng có thể có bốn thông số như hàm fwrite.


fread(addressData, sizeData, numbersData, pointerToFile);
#include #include struct threeNum int n1, n2, n3;;int main(){ int n; struct threeNum num; file *fptr; if ((fptr = fopen("C:\program.bin","rb")) == NULL) printf("Error! opening file"); // Dừng lịch trình nếu bé trỏ đọc file trả về NULL. Exit(1); for(n = 1; n

5. Lấy dữ liệu bằng hàm fseek()

Nếu bạn có nhiều dòng ghi bên phía trong file cùng cần truy vấn đến vị trí rõ ràng thì chỉ việc lặp qua tất cả các mẫu và đem dòng ao ước lấy, điều đó sẽ lãng phí rất nhiều bộ nhớ lưu trữ và thời gian hoạt động.

Ta rất có thể sử dụng hàm fseek () để trỏ đến dòng mong muốn một cách sớm nhất có thể mà không phải duyệt toàn bộ nội dung của file.

Cú pháp:


fseek(FILE * stream, long int offset, int whence);
Tham số đầu tiên là con trỏ mang lại file. Tham số thiết bị hai là kích thước dữ liệu đề nghị ghi vào. Tham số thứ cha chỉ định vị trí bắt đầu tìm.

Tham số whence chính là một trong cha hằng số sau:

WhenceÝ nghĩa
SEEK_SETBắt đầu tự vị trí trước tiên của file.
SEEK_ENDBắt đầu trường đoản cú vị trí sau cùng của file.
SEEK_CURBắt đầu trường đoản cú vị trí bây giờ của con trỏ

#include #include struct threeNum int n1, n2, n3;;int main(){ int n; struct threeNum num; tệp tin *fptr; if ((fptr = fopen("C:\program.bin","rb")) == NULL) printf("Error! opening file"); // Dừng lịch trình nếu bé trỏ hiểu file trả về NULL. Exit(1); // di chuyển con trỏ về cuối file fseek(fptr, -sizeof(struct threeNum), SEEK_END); for(n = 1; n
Chương trình này sẽ ban đầu đọc các bản ghi từ file program.bin theo sản phẩm công nghệ tự ngược lại (từ cuối mang đến trước) và in ra màn hình.