[r]
(1)ĐHSP
Ôn tập xử lý tập tin với C++
http://fit.hcmup.edu.vn/~tienttt
Cấu trúc
(2)Text file
Dữ liệu file lưu trữ
dạng ASCII.
Ví dụ: chuỗi “AB” 12 lưu trữ
trong file có khoảng trắng chúng.
20/06/2010
3
Binary file
Dữ liệu lưu trữ dạng mã
nhị phân.
Lưu trữ liệu dạng cấu trúc, có
kích thước cố định.
Thường dùng để ghi tồn
(3)Khai báo mở tập tin để ghi liệu
ofstream <tên biến>;
ofstream <tên biến>(<tên file>);
Ví dụ: ofstreamfout;
fout.open(“data.txt”); hoặc ofstreamfout(“data.txt”);
Ghi liệu chuẩn
Tương tự cout
<tên biến> <toán tử xuất (<<)> Ví dụ: inta;
fout<<a; 20/06/2010
5
Ghi liệu dạng nhị phân
ostream& write(char* pch,int nCount);
ostream& write(unsigned char* puch,int nCount); ostream& write(signed char* psch,int nCount); Giải thích tham số
• pch,puch,psch: trỏ đến mảng ký tự lưu liệu • nCount: số byte cần ghi
(4)Ví dụ
Ghi liệu phần tử số nguyên liên tiếp file dạng nhị phân
-int a[10];
a[0]=65;a[1]=66;a[2]=97;a[3]=99;a[4]=67; ofstream fout(“data.txt”);
int n=5;
fout.write((char*)a,n*sizeof(*a)); fout.close();
20/06/2010
7
Mở tập tin để đọc liệu
ifstream <tên biến>;
ifstream <tên biến>(<tên file>);
Ví dụ: ifstreamfin; fin.open(“data.dat”); hoặc ifstreamfin(“data.dat”);
Đọc liệu chuẩn
Tương tự cin
(5)Đọc liệu dạng nhị phân
istream& read(char* pch, int nCount);
istream& read(unsigned char* puch, int nCount);
istream& read(signed char* psch, int nCount); Giải thích tham số
pch,puch,psch: trỏ đến mảng ký tự lưu liệu nCount: số byte lớn cần đọc
20/06/2010
9
Ví dụ
Đọc liệu phần tử số nguyên liên tiếp ghi dạng nhị phân
-int a[10];
ifstream fin(“data.dat”); int n=5;
fin.read((char*)a,n*sizeof(*a)); fin.close();
(6)Một số thao tác khác với tập tin
Lấy vị trí trỏ tập tin Khi đọc
• Dùng hàm tellg();
• Ví dụ: long pos=fin.tellg();
Khi ghi
• Dùng hàm tellp();
• Ví dụ: long pos=fout.tellp();
20/06/2010
11
Một số thao tác khác với tập tin
Di chuyển trỏ đến vị trí tập tin Khi đọc
• Dùng hàm seekg(long sobyte, ios::xx vtbd); • Ví dụ: fin.seekg(0,ios::beg); //về đầu tập tin
Khi ghi
• Dùng hàm seekp(long sobyte, ios::xx vtbd); • Ví dụ: fout.seekp(0,ios::end); //đến cuối tập tin
Hằng số
(7)Ví dụ
Tính kích thước tập tin
-long SizeOf(char *fileName) {
longend,begin;
ifstream myfile(fileName); begin = myfile.tellg(); myfile.seekg(0, ios::end); end = myfile.tellg();
myfile.close(); return end-begin; } 20/06/2010 13 fstream
Sử dụng đối tượng lớp vừa đọc vừa ghi liệu tập tin is_open(): Trả true mở, false
nếu không mở
Mở tập tin vừa đọc vừa ghi dạng nhị phân fstream f;
f.open(“data.dat”,ios::in|ios::out|ios::binar y);
ios::in, ios::out, ios::app, ios::nocreate, …
(8)