Khái niệm
File là một loại “Tài liệu” nhằm lưu trữ dữ liệu và thông tin. Có rất nhiều kiểu file khác nhau nhằm lưu dữ các kiểu dữ liệu và thông tin khác nhau, ví dụ như file text, file Excel, file Json, file XML, hay là file CSV v.v…
Để có thể thao tác với các loại file này, người dùng thông thường cần các phần mềm chuyên dùng để mở, đọc ghi và lưu chúng. Tuy nhiên thì với các lập trình viên như chúng ta thì bằng cách sử dụng sử dụng ngôn ngữ C++, chúng ta cũng có thể dễ dàng thực hiện các thao tác tương tự với file như vậy.
Thao tác với file
Đọc file
Cú pháp:
ifstream bientep("Đường dẫn tới tệp");
Ví dụ:
ifstream f("C:\\input.inp");
Hoặc
ifstream in("input.inp");
Ở ví dụ trên sử dụng đường dẫn tuyệt đối, với ví dụ ở dưới là đường dẫn tương đối chỉ sử dụng khi tệp và file chương trình nằm trong cùng thư mục mẹ.
Ví dụ trong thư tệp input.inp như sau:
NT-CODER Wellcome
2022Ta thực hiện đọc file như sau:
#include <bits/stdc++.h>
using namespace std;
int main() {
string str;
int year;
ifstream f("input.inp");
getline(f, str);
f >> year;
f.close();
cout << str << endl;
cout << year << endl;
system("pause");
}
Kết quả:
getline: đọc theo dòng nếu không sử dụng getline ta nhận được kết quả sau:
Nhưng trong số bài toán có nhiều bài dữ liệu ta không thể sử dụng như vậy mà phải kết hợp với vòng for hoặc while để đọc.
Ví dụ tệp input.inp có dữ liệu là:
5
1
6
7
8
Chương trình đọc file như sau:
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream f("input.inp");
while(!f.eof()) {
int a;
f >> a;
cout << a << " ";
}
f.close();
system("pause");
}
q
bientep.eof(): Trả về false khi chưa đến cuối file ngược lại là true.
Vòng lặp while với ý nghĩa khi chưa lặp đến cuối file thì vẫn tiếp tục thực hiện.
Kết quả
Đó là lặp với số lần không biết trước, đối với số lần biết trước ví dụ tệp gồm 3 số là ngày tháng và năm như sau:
8 10 2022
Ta có thể sử dụng vòng for như sau:
Ghi file
Cú pháp:
ofstream bientep("Đường dẫn tới tệp");
Ví dụ:
ofstream f("C:\\input.inp");
Hoặc
ofstream in("input.inp");
Ví dụ: viết chương trình tính n giai thừa ghi vào tệp tên giaithua.out dữ liệu được lấy từ tệp giaithua.inp gồm 1 số nguyên n duy nhất trên 1 dòng.
Ta thực hiện như sau:
#include <bits/stdc++.h>
using namespace std;
long int giaithua(int n) {
if(n == 0)
return 1;
return giaithua(n-1)*n;
}
int main() {
int n, res;
ifstream f("giaithua.inp");
f >> n;
f.close();
res = giaithua(n);
ofstream f2("giaithua.out");
f2 << res;
f2.close();
system("pause");
}
Tệp giaithua.inp có nội dung la: 5
Kết quả ta nhận được 1 file giaithua.out có nội dung là: 120
Ngoài ra việc đọc hay ghi file có thể sử dụng fstream để thay thế từ khóa ifstream và ofstream
Các mode đọc và ghi file
- ios::app: Chế độ Append. Tất cả output tới file đó được phụ thêm vào cuối file đó
- ios::ate: Mở một file cho output và di chuyển điều khiển read/write tới cuối của file
- ios::in: Mở một file để đọc
- ios::out: Mở một file để ghi
- ios::trunc: Nếu file này đã tồn tại, nội dung của nó sẽ được cắt (truncate) trước khi mở file
Để kết hợp nhiều mode ta sử dụng dấu "|".
Ví dụ:
ofstream("output.out", ios::out | ios::app);
Vậy là đã kết thúc bài học hôm nay. Hãy để lại bình luận nếu vẫn còn thắc mắc.
Nhận xét
Đăng nhận xét