Sử Dụng File Siêu Cơ Bản Với C++
Trong bài viết này mình xin được trình bày với các bạn cách nhập xuất file rất cơ bản khi làm việc với file trong C++
Khi sử dụng file ta cần phải khai báo thư viện fstream với cú pháp: #include <fstream>
Khi xử lí file trong C++ ta có 3 class là:
ifstream
là class để đọc dữ liệu đầu vào từ file-
Ví dụ khai báo một biến kiểu ifstream để đọc dữ liệu từ một file có tên là input.txt: ifstream ip("input.txt");
-
ofstream
là class để ghi dữ liệu vào (o viết tắt của out, f viết tắt của file)- Ví dụ khai báo một biến ofstream để mở file: ofstream op;
fstream
là class để đọc hoặc ghi dữ liệu- Ta có thể thay thế 2 từ khóa trên bằng từ khóa fstream
Đọc ghi file thường có các chế độ (mode) định dạng đi kèm như sau:
ios::in
dùng để Mở cho các hoạt động đầu vào. (mode mặc định của ifstream)
ios::out
dùng để mở cho các hoạt động đầu ra. (mode mặc định của ofstream)
ios::binary
dùng để mở file nhị phân.
ios::ate
là đặt vị trí con trỏ ở cuối file khi chúng ta mở file.
ios::app
là khi file đã có sẵn data thì dữ liệu sẽ được thêm vào cuối file.
ios::trunc
là khi ta chèn dữ liệu vào file, thì csc dữ liệu cũ sẽ bị xóa hết.
Để ghi dữ liệu vào file ta dùng cú pháp: nameFile<<"Data";
nameFile>>value;
open("nameFile", mode);
(khi dùng devC mode có thể có hoặc không nhưng trong visual thì phải bắt buộc có)#include <bits/stdc++.h>
#include <fstream>
using namespace std;
int main()
{
ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt");
fstream output;
output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out );
string str;
input>>str; // lấy giá trị biến str từ file input
cout<<str; // in str ra màn hình console
output<<"Hello world"; //in Hello world vào file output
input.close(); //đóng file input
output.close(); //đóng file output
return 0;
}
C:\Users\minhh\OneDrive\Desktop\input.txt
sẽ bị lỗi do \ là một kí tự đặc biệt và nó sẽ hiểu \U
\m
\O
\D
\i
là một lệnh giống như \n
(trỏ xuống dòng) vì vậy để ta coi \ là input>>str;
thì ta chỉ đọc được chuỗi cho tới khi nó gặp dấu cách. Muốn lấy dữ liệu lấy được cả dấu cách ta dùng hàm getline(input,str);
Một số hàm hỗ trợ hay gặp khi sử dụng file:
eof()
- Hàm eof() trả về true khi con trỏ đã trỏ tới cuối file và với false thì ngược lại.
- Khi một file có nhiều dòng dữ liệu ta phải đọc chúng như sau:
-
string line; while(!input.eof()) //khi chưa tới cuối file thì tiếp tục đọc { getline(input,line); output<<line; }
-
fail()
- Hàm fail() trả về true nếu đọc học viết lên file bị lỗi hoặc khi ta đọc 1 số nguyên từ file nhưng dữ liệu được đọc là một string; trả về false khi không có lỗi phát sinh khi đọc viết file.
is_open()
-
Để kiểm tra file đã được mở hay chưa ta dùng hàm is_open() hàm này trả về true nếu mở thành công và false nếu thất bại.Ví dụ:
#include <bits/stdc++.h> #include <fstream> using namespace std; int main() { //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt"); fstream output; //tạo biến output để ghi dữ liệu vào file output.txt output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out); if(input.is_open() && output.is_open()) { cout<<"Mo thanh cong!!"<<endl; } else { cout<<"Mo that bai!!"<<endl; } input.close(); // đóng file input output.close(); // đóng file output return 0; }
Kết quả của ví dụ trên là: in ra "Mo thanh cong!!" ở màn hình console.Ta có hàm getline() để đọc dữ liệu nhận cả dấu cách. Vì vậy khi câu lệnh input>>line; được thay thế bằng getline(input,line); thì lúc này biến line = "Hello world" => file output.txt có dữ liệu là "Hello world".
-
close()
- close() là hàm để đóng file, khi mỗi chương trình ta viết xong thì ta nên close file lại để thông báo cho hệ thống rằng tôi đã làm xong nhiệm vụ yêu cầu hệ thống xóa các bộ nhớ đệm liên quan rồi đóng file lại.
Tổng Kết
Như vậy mình đã sơ lược những thao tác rất cơ bản khi sử dụng file .txt đối với C++, và các bạn chỉ cần nhớ khi làm việc với file việc đọc dữ liệu là rất quan trọng các bạn nên thực hành nhiều để hiểu rõ hơn đặc biệt phần mode. Cảm ơn các bạn đã đọc hẹn gặp lại các bạn trong bài viết kế tiếp. Thank for All!