Tài liệu Bài giảng Lập trình C - Chương 6: Lưu trữ dữ liệu trên tập tin: CHƯƠNG 6
Lưu trữ dữ liệu trên tập tin
1. Giới Thiệu
Tập tin văn bản: tập tin dùng để ghi các ký tự lên đĩa theo các dòng.
Tập tin nhị phân: tập tin dùng để ghi các cấu trúc dạng nhị phân
(được mã hoá).
2
2. Thao tác với tập tin
Bước 1: Mở tập tin để đọc/ ghi.
Bước 2: Các xử lý trên tập tin.
Bước 3: Đóng tập tin.
3
3. Lớp fstream -
• fstream dataFile : khai báo tên đối tượng kiểu fstream
• dataFile.open(“tên file", mode);
• Tên file : chuỗi chứ tên file
• Mode : Có 5 chế độ cơ bản sau:
• ios::out :chế độ mở file để xuất ra (đọc file)
• ios::in : chế độ mở file để Ghi
• ios::app : Chế độ gắn thêm vào file (nếu file chưa được tạo thì nó sẽ
tạo ra 1 file mới)
• ios::binary : Chế độ nhị phân
• ios::trunc : Nếu file đã được tạo thì nội dung của nó sẽ bị xóa đi.
• Đóng file : dataFile.close()
4
4. Các thao tác trên file
• Mở file :
• dataFile.open(“info.txt", ios::out);
...
15 trang |
Chia sẻ: honghanh66 | Lượt xem: 763 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài giảng Lập trình C - Chương 6: Lưu trữ dữ liệu trên tập tin, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 6
Lưu trữ dữ liệu trên tập tin
1. Giới Thiệu
Tập tin văn bản: tập tin dùng để ghi các ký tự lên đĩa theo các dòng.
Tập tin nhị phân: tập tin dùng để ghi các cấu trúc dạng nhị phân
(được mã hoá).
2
2. Thao tác với tập tin
Bước 1: Mở tập tin để đọc/ ghi.
Bước 2: Các xử lý trên tập tin.
Bước 3: Đóng tập tin.
3
3. Lớp fstream -
• fstream dataFile : khai báo tên đối tượng kiểu fstream
• dataFile.open(“tên file", mode);
• Tên file : chuỗi chứ tên file
• Mode : Có 5 chế độ cơ bản sau:
• ios::out :chế độ mở file để xuất ra (đọc file)
• ios::in : chế độ mở file để Ghi
• ios::app : Chế độ gắn thêm vào file (nếu file chưa được tạo thì nó sẽ
tạo ra 1 file mới)
• ios::binary : Chế độ nhị phân
• ios::trunc : Nếu file đã được tạo thì nội dung của nó sẽ bị xóa đi.
• Đóng file : dataFile.close()
4
4. Các thao tác trên file
• Mở file :
• dataFile.open(“info.txt", ios::out);
• Ghi file :
• dataFile.open(“info.txt", ios::in);
• Mở ghi và chèn vào cuối file :
• dataFile.open(“info.txt", ios::app);
• Mở để đọc và ghi :
• dataFile.open(“info.txt", ios::in | ios::out);
• Nếu file chưa tồn tại thì sẽ tự động tạo file mới
5
4.1 mở file để ghi
#include
#include
using namespace std;
void main()
{
fstream dataFile;
cout << "Opening file...\n";
dataFile.open("demofile.txt", ios::out); // Mở file để ghi vào
cout << "Now writing data to the file.\n";
dataFile << "Jones\n"; // Ghi dòng thứ 1
dataFile << "Smith\n"; // Ghi dòng thứ 2
dataFile << "Willis\n"; // Ghi dòng thứ 3
dataFile << "Davis\n"; // Ghi dòng thứ 4
dataFile.close(); // Đóng file
cout << "Done.\n";
}
6
4.2 Ghi thêm vào file
//ghi thêm vào file , nếu file đã tồn tại thì tiến hành append tiếp tục
vào
void writeAppendFile()
{
fstream dataFile;
cout << "Opening file...\n";
// Mở file ở chế độ gắn vào.
dataFile.open(“info.txt", ios::out | ios::app);
dataFile << “Eliza beth\n"; // Ghi thêm
dataFile << “Messi\n"; //Ghi thêm
dataFile.close(); // Đóng file
}
7
4.3 Xuất file có định dạng
#include // thư viện cho việc sử dụng hàm setprecision
void writeFormatFile()
{
fstream dataFile;
double num = 17.816392;
dataFile.open("numfile.txt", ios::out);
dataFile << fixed; // Định dạng fixed-point
dataFile << num << endl; //Xuất ra num = 17.816392
dataFile << setprecision(4); // Định dạng 4 phần thập phân sau dấu .
dataFile << num << endl; //Xuất ra num = 17.8164
dataFile << setprecision(2); // 2 phần
dataFile << num << endl; // xuất ra num = 17.82
dataFile.close(); // Đóng file
}
8
4.4 Đọc nội dung file
void main()
{
const int SIZE = 81; // Size của mãng input
char input[SIZE]; // Mãng lưu input
fstream nameFile;
nameFile.open("murphy.txt", ios::in); //Mở file ở chế độ đọc
if (!nameFile)
{ cout << "ERROR: Cannot open file.\n";
return ;
}
while (nameFile >> input) //Đọc nội dung file.
cout << input;
nameFile.close();
}
9
4.4 Đọc nội dung file (tt)
Khoảng trắng (Whitespace) là 1 kí tự mà nó là 1 phần của dữ
liệu, vấn đề sẽ nảy sinh khi ta đoc vào bằng toán tử >>. Bởi vì
toán tử >> nó xem khoảng trắng như 1 kí tự kết thúc
(delimiter), vì thế nó sẽ không đọc chúng vào
Để khắc phục, ta sử dụng hàm getline. Hàm getline sẽ đọc
toàn bộ nội dung của 1 dòng trong file và giữ nguyên định
dạng
10
4.4 Đọc nội dung file
void main()
{
const int SIZE = 81; // Size của mãng input
char input[SIZE]; // Mãng lưu input
fstream nameFile;
nameFile.open("murphy.txt", ios::in); //Mở file ở chế độ đọc
nameFile.getline(input, SIZE); //Dùng kí tự mặc định \n như kí tự kết thúc.
while (!nameFile.eof()) //Nếu chưa kết thúc file thì tiếp tục đọc
{
cout << input << endl;
nameFile.getline(input, SIZE);
}
nameFile.close();
}
11
4.5 Truyền file vào hàm
Chúng ta khi làm việc với những chương trình thực sự thì đôi
khi chúng ta cần phải truyền 1 tên file vào hàm nào đó để tiện
cho việc quản lý, nhưng khi truyền phải lưu ý là luôn luôn
truyền bằng tham chiếu
Ví dụ : bool OpenFile(fstream &file, char *name)
12
Ví dụ: kiểm tra file có tồn tại ?
//Hàm mở file, kiểm tra file có tồn tại chưa ?
bool OpenFile(fstream &file, char *name)
{
file.open(name, ios::in);
if(file.fail())
return false;
else
return true;
}
13
Ví dụ: hiển thị nội dung toàn bộ file
//truyền file vào hàm, hiển thị nội dung file
void ShowContents(fstream &file)
{
char *line = new char[100];//kích thước 1 dòng tối đa là 81
while(file.getline(line,100))
{
cout << line << endl;
}
}
14
Hàm main()
void main()
{
fstream dataFile;
if(!OpenFile(dataFile, "demofile.txt"))
{
cout << "Error !" << endl;
return ;
}
cout << "Successfully.\n";
ShowContents(dataFile);
dataFile.close();
}
15
Các file đính kèm theo tài liệu này:
- chuong_6_file_3941.pdf