SlideShare une entreprise Scribd logo
1  sur  7
Télécharger pour lire hors ligne
Đại học Quốc Gia Thành phố Hồ Chí Minh 
Trường Đại học Khoa Học Tự Nhiên 
Khoa Công Nghệ Thông Tin 
Hướng dẫn 
THAO TÁC 
VỚI TẬP TIN TRONG C++ 
________________________ 
________________________ 
Tháng 9/2011
Thao tác với tập tin 
Khoa CNTT | ĐH KHTN TP HCM Trang 2 
1 Phân loại 
Tập tin là hình thức lưu trữ phổ biến trên bộ nhớ phụ, gồm 2 loại: 
 Tập tin văn bản: là tập tin chỉ lưu trữ thuần túy văn bản, trong đó các kí tự được biểu diễn bằng mã ASCII của nó, người dùng có thể đọc được. 
o Tính chất 
 Dễ truy xuất và xử lý 
 Độ bảo mật kém 
 Tốc độ truy xuất kém 
 Kích thước lớn 
o Ví dụ: Lưu số nguyên 12345 ở dạng binary (2 byte) và dạng chuỗi (5 byte) 
o Các dạng thường gặp 
 Tập tin cấu hình: *.INI, *.CFG 
 *.TXT, *.HTML, *.XML 
 Tập tin nhị phân: là tập tin chứa dữ liệu mà có ít nhất một vài chuỗi bit không thể biểu diễn ở dạng văn bản trơn. Do đó tập tin này chỉ có máy đọc được, còn người không đọc được. 
o Tính chất 
 Truy xuất và xử lý phức tạp 
 Tốc độ truy xuất nhanh 
 Tính bảo mật cao hơn 
o Các dạng thường gặp 
 Các tập tin có cấu trúc tự định nghĩa 
 *.DOC, *XLS, *.PDF, *.PPT… 
 *.JPG, *.PCX, *.BMP, *.TIF… 
 *.MP3, *.WAV, *.AVI… 
2 Một số hàm thao tác tập tin với C++ 
Nhiều bộ thư viện cung cấp một tập các hàm thao tác với tập tin với C++. Ở đây giới thiệu 2 cách phổ dụng: 
 Tập hàm trong cstdio (stdio.h) 
 Tập hàm trong namespace std 
2.1 Sử dụng cstdio (stdio.h) 
2.1.1 Một số hàm xử lý chung Tên hàm Chức năng 
fopen 
Mở tập tin 
fclose 
Đóng tập tin 
fcloseall 
Đóng tất cả tập tin 
fflush 
Làm sạch vùng đệm của một tập tin đang mở 
fflushall 
Làm sạch vùng đệm của tất cả 
remove/unlink 
Xóa tập tin 
feof 
Kiểm tra xem đã đọc đến cuối tập tin
Thao tác với tập tin 
Khoa CNTT | ĐH KHTN TP HCM Trang 3 
2.1.2 Một số hàm xử lý cho tập tin văn bản Tên hàm Chức năng 
fprintf 
Ghi giá trị dạng text lên tập tin 
fscanf 
Đọc giá trị dạng text từ tập tin 
putc/fputc 
Ghi lên tập tin một kí tự (sử dụng tập tin văn bản hoặc nhị phân có khác biệt ) 
getc/fgetc 
Đọc từ tập tin một kí tự (sử dụng tập tin văn bản hoặc nhị phân có khác biệt) 
fputs 
Ghi một chuỗi vào tập tin 
fgets 
Đọc một chuỗi từ tập tin 
2.1.3 Một số hàm xử lý cho tập tin nhị phân Tên hàm Chức năng 
putw 
Ghi một số nguyên lên tập tin 
getw 
Đọc một số nguyên từ tập tin 
fwrite 
Ghi các mẫu tin (có cấu trúc định trước) lên tập tin 
fread 
Đọc các mẫu tin (có cấu trúc định trước) từ tập tin 
fseek 
Di chuyển con trỏ đến vị trí mong muốn 
ftell 
Cho biết vị trí hiện tại của con trỏ 
Chi tiết của mỗi hàm có thể xem từ MSDN hoặc link sau: 
http://www.cplusplus.com/reference/clibrary/cstdio/ 
2.1.4 Ví dụ: 
 Ghi tập tin văn bản 
/* fprintf example */ 
#include <stdio.h> 
int main () 
{ 
FILE * pFile; 
int n; 
char name [100]; 
pFile = fopen ("myfile.txt","w"); 
for (n=0 ; n<3 ; n++) 
{ 
puts ("please, enter a name: "); 
gets (name); 
fprintf (pFile, "Name %d [%-10.10s]n",n,name); 
} 
fclose (pFile); 
return 0; 
}
Thao tác với tập tin 
Khoa CNTT | ĐH KHTN TP HCM Trang 4 
Đọc tập tin văn bản 
/* fscanf example */ 
#include <stdio.h> 
int main () 
{ 
char str [80]; 
float f; 
FILE * pFile; 
pFile = fopen ("myfile.txt","w+"); 
fprintf (pFile, "%f %s", 3.1416, "PI"); 
rewind (pFile); 
fscanf (pFile, "%f", &f); 
fscanf (pFile, "%s", str); 
fclose (pFile); 
printf ("I have read: %f and %s n",f,str); 
return 0; 
} 
 Ghi tập tin nhị phân 
#include <stdio.h> 
int main () 
{ 
FILE * pFile; 
char buffer[] = { 'x' , 'y' , 'z' }; 
pFile = fopen ( "myfile.bin" , "wb" ); 
fwrite (buffer , 1 , sizeof(buffer) , pFile ); 
fclose (pFile); 
return 0; 
} 
 Đọc tập tin nhị phân 
#include <stdio.h> 
#include <stdlib.h> 
int main () { 
FILE * pFile; 
long lSize; 
char buffer[255];
Thao tác với tập tin 
Khoa CNTT | ĐH KHTN TP HCM Trang 5 
pFile = fopen ( "myfile.bin" , "rb" ); 
if (pFile==NULL) {fputs ("File error",stderr); return;} 
// copy the file into the buffer: 
result = fread (buffer,1,255,pFile); 
if (result != lSize) {fputs ("Reading error",stderr); return;} 
fclose (pFile); 
return 0; 
} 
2.2 Sử dụng namespace std 
 ofstream: class gồm các phương thức để ghi tập tin 
 ifstream: class gồm các phương thức để đọc tập tin 
 fstream: class gôm các phương thức cho cả thao tác đọc và ghi tập tin 
Ở đây chỉ giới thiệu fstream. 
2.2.1 Một số hàm xử lý chung Tên phương thức Chức năng 
open 
Mở tập tin 
close 
Đóng tập tin 
is_open 
Kiểm tra xem tập tin có đang mở hay không. 
flush 
Làm sạch vùng đệm của tập tin đang mở 
good 
Kiểm tra trạng thái của tập tin có tốt để đọc/ghi không 
eof 
Kiểm tra xem đã đọc đến cuối tập tin chưa 
2.2.2 Một số hàm xử lý cho tập tin văn bản Tên phương thức Chức năng 
operator >> 
Đọc dữ liệu từ tập tin 
operator << 
Ghi dữ liệu vào tập tin 
getline 
Đọc một dòng dữ liệu từ tập tin 
get 
Đọc một kí tự hoặc một chuỗi từ tập tin, tùy thuộc vào tham số của phương thức. 
put 
Ghi một kí tự xuống tập tin 
2.2.3 Một số hàm xử lý cho tập tin nhị phân Tên phương thức Chức năng 
read 
Đọc mẫu tin (theo cấu trúc định trước) từ tập tin 
write 
Ghi mẫu tin (theo cấu trúc định trước ) vào tập tin 
seekg 
Di chuyển con trỏ file đến vị trí xác định 
tellp 
Cho biết vị trí hiện tại của con trỏ file
Thao tác với tập tin 
Khoa CNTT | ĐH KHTN TP HCM Trang 6 
Chi tiết của mỗi hàm có thể tham khảo trên MSDN hoặc link sau: 
http://www.cplusplus.com/reference/iostream/fstream/ 
2.2.4 Ví dụ: 
 Ghi tập tin văn bản 
#include <iostream> 
#include <fstream> 
using namespace std; 
int main () { 
ofstream myfile; 
myfile.open ("example.txt"); 
myfile << "Writing this to a file.n"; 
myfile.close(); 
return 0; 
} 
 Đọc tập tin văn bản 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 
int main () { 
string line; 
ifstream myfile ("example.txt"); 
if (myfile.is_open()) 
{ 
while ( myfile.good() ) 
{ 
myfile >> line; 
cout << line << endl; 
} 
myfile.close(); 
} 
else cout << "Unable to open file"; 
return 0; 
} 
 Ghi tập tin nhị phân 
#include <fstream>
Thao tác với tập tin 
Khoa CNTT | ĐH KHTN TP HCM Trang 7 
using namespace std; 
int main () 
{ 
ifstream file ("example.bin", ios::out|ios::binary|ios::ate); 
char buffer[] = { 'x' , 'y' , 'z' }; 
if(file.is_open()) 
file.write(buffer , sizeof(buffer) ); 
file.close(); 
return 0; 
} 
 Đọc tập tin nhị phân 
// Đọc toàn bộ nội dung của tập tin 
#include <iostream> 
#include <fstream> 
using namespace std; 
ifstream::pos_type size; 
char * memblock; 
int main () { 
ifstream file ("example.bin", ios::in|ios::binary|ios::ate); 
if (file.is_open()) 
{ 
size = file.tellg(); 
memblock = new char [size]; 
file.seekg (0, ios::beg); 
file.read (memblock, size); 
file.close(); 
cout << "the complete file content is in memory"; 
delete[] memblock; 
} 
else cout << "Unable to open file"; 
return 0; 
}

Contenu connexe

Tendances

Giao an tin hoc 11 - Tuan 11 - Bai 16 Vi du lam viec voi tep - v02 - vtq ngoc
Giao an tin hoc 11 - Tuan 11 - Bai 16 Vi du lam viec voi tep - v02 - vtq ngocGiao an tin hoc 11 - Tuan 11 - Bai 16 Vi du lam viec voi tep - v02 - vtq ngoc
Giao an tin hoc 11 - Tuan 11 - Bai 16 Vi du lam viec voi tep - v02 - vtq ngoc
Ngoc Vu Thi Quynh
 
209 008 ky thuat truy xuat file ini
209 008 ky thuat truy xuat file ini209 008 ky thuat truy xuat file ini
209 008 ky thuat truy xuat file ini
traducanh
 
Giao an tin hoc 11 - Tuan 10 - Bai 14 - 15 Tep va thao tac voi tep - v04 - vt...
Giao an tin hoc 11 - Tuan 10 - Bai 14 - 15 Tep va thao tac voi tep - v04 - vt...Giao an tin hoc 11 - Tuan 10 - Bai 14 - 15 Tep va thao tac voi tep - v04 - vt...
Giao an tin hoc 11 - Tuan 10 - Bai 14 - 15 Tep va thao tac voi tep - v04 - vt...
Ngoc Vu Thi Quynh
 
Bảng tra cứu các lệnh cơ bản của unix và linux sưu tầm bởi www.vilinux.com
Bảng tra cứu các lệnh cơ bản của unix và linux sưu tầm bởi www.vilinux.comBảng tra cứu các lệnh cơ bản của unix và linux sưu tầm bởi www.vilinux.com
Bảng tra cứu các lệnh cơ bản của unix và linux sưu tầm bởi www.vilinux.com
Brand Xanh
 

Tendances (16)

Giao an tin hoc 11 - Tuan 11 - Bai 16 Vi du lam viec voi tep - v02 - vtq ngoc
Giao an tin hoc 11 - Tuan 11 - Bai 16 Vi du lam viec voi tep - v02 - vtq ngocGiao an tin hoc 11 - Tuan 11 - Bai 16 Vi du lam viec voi tep - v02 - vtq ngoc
Giao an tin hoc 11 - Tuan 11 - Bai 16 Vi du lam viec voi tep - v02 - vtq ngoc
 
Session 21
Session 21Session 21
Session 21
 
Tin11 chuong 05 bai 15
Tin11 chuong 05 bai 15Tin11 chuong 05 bai 15
Tin11 chuong 05 bai 15
 
209 008 ky thuat truy xuat file ini
209 008 ky thuat truy xuat file ini209 008 ky thuat truy xuat file ini
209 008 ky thuat truy xuat file ini
 
Inter process-pipe
 Inter process-pipe Inter process-pipe
Inter process-pipe
 
Giao an tin hoc 11 - Tuan 10 - Bai 14 - 15 Tep va thao tac voi tep - v04 - vt...
Giao an tin hoc 11 - Tuan 10 - Bai 14 - 15 Tep va thao tac voi tep - v04 - vt...Giao an tin hoc 11 - Tuan 10 - Bai 14 - 15 Tep va thao tac voi tep - v04 - vt...
Giao an tin hoc 11 - Tuan 10 - Bai 14 - 15 Tep va thao tac voi tep - v04 - vt...
 
Bài 7 - Xử lý nhập xuất - Nền tảng lập trình ứng dụng với C#
Bài 7 - Xử lý nhập xuất - Nền tảng lập trình ứng dụng với C#Bài 7 - Xử lý nhập xuất - Nền tảng lập trình ứng dụng với C#
Bài 7 - Xử lý nhập xuất - Nền tảng lập trình ứng dụng với C#
 
10 back
10 back10 back
10 back
 
Chuong 03 he_thong_file
Chuong 03 he_thong_fileChuong 03 he_thong_file
Chuong 03 he_thong_file
 
20 lenh linux
20 lenh linux20 lenh linux
20 lenh linux
 
Bảng tra cứu các lệnh cơ bản của unix và linux sưu tầm bởi www.vilinux.com
Bảng tra cứu các lệnh cơ bản của unix và linux sưu tầm bởi www.vilinux.comBảng tra cứu các lệnh cơ bản của unix và linux sưu tầm bởi www.vilinux.com
Bảng tra cứu các lệnh cơ bản của unix và linux sưu tầm bởi www.vilinux.com
 
P2
P2P2
P2
 
Linux và mã nguồn mở
Linux và mã nguồn mởLinux và mã nguồn mở
Linux và mã nguồn mở
 
Command line in linux
Command line in linuxCommand line in linux
Command line in linux
 
Dsfont help
Dsfont helpDsfont help
Dsfont help
 
Thuc hanh 13
Thuc hanh  13Thuc hanh  13
Thuc hanh 13
 

En vedette

Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.doc
Trần Văn Nam
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Trần Văn Nam
 
Bài giảng ngôn ngữ lập trình c++ chương 7 ra vào dữ liệu tài liệu, ebook, ...
Bài giảng ngôn ngữ lập trình c++ chương 7  ra vào dữ liệu   tài liệu, ebook, ...Bài giảng ngôn ngữ lập trình c++ chương 7  ra vào dữ liệu   tài liệu, ebook, ...
Bài giảng ngôn ngữ lập trình c++ chương 7 ra vào dữ liệu tài liệu, ebook, ...
Trần Văn Nam
 
Phan 2 chuong 9 (cau truc)
Phan 2   chuong 9 (cau truc)Phan 2   chuong 9 (cau truc)
Phan 2 chuong 9 (cau truc)
Trần Văn Nam
 
Phan 2 chuong 8 (chuoi ky tu)
Phan 2   chuong 8 (chuoi ky tu)Phan 2   chuong 8 (chuoi ky tu)
Phan 2 chuong 8 (chuoi ky tu)
Trần Văn Nam
 
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trìnhGiáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
Trần Văn Nam
 

En vedette (20)

Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Tut4 solution
Tut4 solutionTut4 solution
Tut4 solution
 
Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.doc
 
Tut6
Tut6Tut6
Tut6
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Cam bien gia toc
Cam bien gia tocCam bien gia toc
Cam bien gia toc
 
Bai tap c
Bai tap cBai tap c
Bai tap c
 
Lenh tat auto_cad hk3
Lenh tat auto_cad hk3Lenh tat auto_cad hk3
Lenh tat auto_cad hk3
 
Bài giảng ngôn ngữ lập trình c++ chương 7 ra vào dữ liệu tài liệu, ebook, ...
Bài giảng ngôn ngữ lập trình c++ chương 7  ra vào dữ liệu   tài liệu, ebook, ...Bài giảng ngôn ngữ lập trình c++ chương 7  ra vào dữ liệu   tài liệu, ebook, ...
Bài giảng ngôn ngữ lập trình c++ chương 7 ra vào dữ liệu tài liệu, ebook, ...
 
Lect09 string
Lect09 stringLect09 string
Lect09 string
 
Chapter07 io
Chapter07 ioChapter07 io
Chapter07 io
 
Lab4
Lab4Lab4
Lab4
 
Chuong 05
Chuong 05Chuong 05
Chuong 05
 
Pointer
PointerPointer
Pointer
 
Lect05 array
Lect05 arrayLect05 array
Lect05 array
 
Phan 2 chuong 9 (cau truc)
Phan 2   chuong 9 (cau truc)Phan 2   chuong 9 (cau truc)
Phan 2 chuong 9 (cau truc)
 
Phan 2 chuong 8 (chuoi ky tu)
Phan 2   chuong 8 (chuoi ky tu)Phan 2   chuong 8 (chuoi ky tu)
Phan 2 chuong 8 (chuoi ky tu)
 
Tn ktlt
Tn ktltTn ktlt
Tn ktlt
 
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trìnhGiáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
 
Ktlt lab full
Ktlt lab fullKtlt lab full
Ktlt lab full
 

Similaire à Huong dan thao_tac_file

Phan 2 chuong 10 (tap tin)
Phan 2   chuong 10 (tap tin)Phan 2   chuong 10 (tap tin)
Phan 2 chuong 10 (tap tin)
Trần Văn Nam
 
Hệ điều hành (chương 4)
Hệ điều hành (chương 4)Hệ điều hành (chương 4)
Hệ điều hành (chương 4)
realpotter
 
Lesson 3 - Linux File System
Lesson 3 - Linux File SystemLesson 3 - Linux File System
Lesson 3 - Linux File System
Thang Man
 
6 - Lập trình C++ cơ bản_print.pdf
6 - Lập trình C++ cơ bản_print.pdf6 - Lập trình C++ cơ bản_print.pdf
6 - Lập trình C++ cơ bản_print.pdf
SonNguyen642431
 

Similaire à Huong dan thao_tac_file (20)

Bài tập thực hành C#
Bài tập thực hành C#Bài tập thực hành C#
Bài tập thực hành C#
 
Session 21
Session 21Session 21
Session 21
 
Phan 2 chuong 10 (tap tin)
Phan 2   chuong 10 (tap tin)Phan 2   chuong 10 (tap tin)
Phan 2 chuong 10 (tap tin)
 
Io trong java
Io trong javaIo trong java
Io trong java
 
IO trong Java
IO trong JavaIO trong Java
IO trong Java
 
Oop unit 11 input và output
Oop unit 11 input và outputOop unit 11 input và output
Oop unit 11 input và output
 
Oop 13
Oop 13Oop 13
Oop 13
 
Hệ điều hành (chương 4)
Hệ điều hành (chương 4)Hệ điều hành (chương 4)
Hệ điều hành (chương 4)
 
Bai07xulynhapxuat 130622092548-phpapp02
Bai07xulynhapxuat 130622092548-phpapp02Bai07xulynhapxuat 130622092548-phpapp02
Bai07xulynhapxuat 130622092548-phpapp02
 
BÀI 7: Thao tác với file - các vấn đề khác - Giáo trình FPT
BÀI 7: Thao tác với file - các vấn đề khác - Giáo trình FPTBÀI 7: Thao tác với file - các vấn đề khác - Giáo trình FPT
BÀI 7: Thao tác với file - các vấn đề khác - Giáo trình FPT
 
Lesson 3 - Linux File System
Lesson 3 - Linux File SystemLesson 3 - Linux File System
Lesson 3 - Linux File System
 
Giáo án FOXPRO.doc
Giáo án FOXPRO.docGiáo án FOXPRO.doc
Giáo án FOXPRO.doc
 
6 - Lập trình C++ cơ bản_print.pdf
6 - Lập trình C++ cơ bản_print.pdf6 - Lập trình C++ cơ bản_print.pdf
6 - Lập trình C++ cơ bản_print.pdf
 
3 he thong-file
3 he thong-file3 he thong-file
3 he thong-file
 
3 he thong-file
3 he thong-file3 he thong-file
3 he thong-file
 
3 he thong-file
3 he thong-file3 he thong-file
3 he thong-file
 
Bai 15
Bai 15Bai 15
Bai 15
 
File trong c_
File trong c_File trong c_
File trong c_
 
Python
PythonPython
Python
 
tài liệu Mã nguồn mở 03 he-thong-tep-linux-14
tài liệu Mã nguồn mở  03 he-thong-tep-linux-14tài liệu Mã nguồn mở  03 he-thong-tep-linux-14
tài liệu Mã nguồn mở 03 he-thong-tep-linux-14
 

Plus de Trần Văn Nam (8)

Tut5 solution
Tut5 solutionTut5 solution
Tut5 solution
 
Stl string
Stl stringStl string
Stl string
 
Ctdlgt
CtdlgtCtdlgt
Ctdlgt
 
Bg chuong trinh dich chuong 3
Bg chuong trinh dich chuong 3Bg chuong trinh dich chuong 3
Bg chuong trinh dich chuong 3
 
Bai de quy
Bai de quyBai de quy
Bai de quy
 
C++ 2011 april_draft
C++ 2011 april_draftC++ 2011 april_draft
C++ 2011 april_draft
 
Tailieuvkt hk3
Tailieuvkt hk3Tailieuvkt hk3
Tailieuvkt hk3
 
Nhung ad
Nhung adNhung ad
Nhung ad
 

Huong dan thao_tac_file

  • 1. Đại học Quốc Gia Thành phố Hồ Chí Minh Trường Đại học Khoa Học Tự Nhiên Khoa Công Nghệ Thông Tin Hướng dẫn THAO TÁC VỚI TẬP TIN TRONG C++ ________________________ ________________________ Tháng 9/2011
  • 2. Thao tác với tập tin Khoa CNTT | ĐH KHTN TP HCM Trang 2 1 Phân loại Tập tin là hình thức lưu trữ phổ biến trên bộ nhớ phụ, gồm 2 loại:  Tập tin văn bản: là tập tin chỉ lưu trữ thuần túy văn bản, trong đó các kí tự được biểu diễn bằng mã ASCII của nó, người dùng có thể đọc được. o Tính chất  Dễ truy xuất và xử lý  Độ bảo mật kém  Tốc độ truy xuất kém  Kích thước lớn o Ví dụ: Lưu số nguyên 12345 ở dạng binary (2 byte) và dạng chuỗi (5 byte) o Các dạng thường gặp  Tập tin cấu hình: *.INI, *.CFG  *.TXT, *.HTML, *.XML  Tập tin nhị phân: là tập tin chứa dữ liệu mà có ít nhất một vài chuỗi bit không thể biểu diễn ở dạng văn bản trơn. Do đó tập tin này chỉ có máy đọc được, còn người không đọc được. o Tính chất  Truy xuất và xử lý phức tạp  Tốc độ truy xuất nhanh  Tính bảo mật cao hơn o Các dạng thường gặp  Các tập tin có cấu trúc tự định nghĩa  *.DOC, *XLS, *.PDF, *.PPT…  *.JPG, *.PCX, *.BMP, *.TIF…  *.MP3, *.WAV, *.AVI… 2 Một số hàm thao tác tập tin với C++ Nhiều bộ thư viện cung cấp một tập các hàm thao tác với tập tin với C++. Ở đây giới thiệu 2 cách phổ dụng:  Tập hàm trong cstdio (stdio.h)  Tập hàm trong namespace std 2.1 Sử dụng cstdio (stdio.h) 2.1.1 Một số hàm xử lý chung Tên hàm Chức năng fopen Mở tập tin fclose Đóng tập tin fcloseall Đóng tất cả tập tin fflush Làm sạch vùng đệm của một tập tin đang mở fflushall Làm sạch vùng đệm của tất cả remove/unlink Xóa tập tin feof Kiểm tra xem đã đọc đến cuối tập tin
  • 3. Thao tác với tập tin Khoa CNTT | ĐH KHTN TP HCM Trang 3 2.1.2 Một số hàm xử lý cho tập tin văn bản Tên hàm Chức năng fprintf Ghi giá trị dạng text lên tập tin fscanf Đọc giá trị dạng text từ tập tin putc/fputc Ghi lên tập tin một kí tự (sử dụng tập tin văn bản hoặc nhị phân có khác biệt ) getc/fgetc Đọc từ tập tin một kí tự (sử dụng tập tin văn bản hoặc nhị phân có khác biệt) fputs Ghi một chuỗi vào tập tin fgets Đọc một chuỗi từ tập tin 2.1.3 Một số hàm xử lý cho tập tin nhị phân Tên hàm Chức năng putw Ghi một số nguyên lên tập tin getw Đọc một số nguyên từ tập tin fwrite Ghi các mẫu tin (có cấu trúc định trước) lên tập tin fread Đọc các mẫu tin (có cấu trúc định trước) từ tập tin fseek Di chuyển con trỏ đến vị trí mong muốn ftell Cho biết vị trí hiện tại của con trỏ Chi tiết của mỗi hàm có thể xem từ MSDN hoặc link sau: http://www.cplusplus.com/reference/clibrary/cstdio/ 2.1.4 Ví dụ:  Ghi tập tin văn bản /* fprintf example */ #include <stdio.h> int main () { FILE * pFile; int n; char name [100]; pFile = fopen ("myfile.txt","w"); for (n=0 ; n<3 ; n++) { puts ("please, enter a name: "); gets (name); fprintf (pFile, "Name %d [%-10.10s]n",n,name); } fclose (pFile); return 0; }
  • 4. Thao tác với tập tin Khoa CNTT | ĐH KHTN TP HCM Trang 4 Đọc tập tin văn bản /* fscanf example */ #include <stdio.h> int main () { char str [80]; float f; FILE * pFile; pFile = fopen ("myfile.txt","w+"); fprintf (pFile, "%f %s", 3.1416, "PI"); rewind (pFile); fscanf (pFile, "%f", &f); fscanf (pFile, "%s", str); fclose (pFile); printf ("I have read: %f and %s n",f,str); return 0; }  Ghi tập tin nhị phân #include <stdio.h> int main () { FILE * pFile; char buffer[] = { 'x' , 'y' , 'z' }; pFile = fopen ( "myfile.bin" , "wb" ); fwrite (buffer , 1 , sizeof(buffer) , pFile ); fclose (pFile); return 0; }  Đọc tập tin nhị phân #include <stdio.h> #include <stdlib.h> int main () { FILE * pFile; long lSize; char buffer[255];
  • 5. Thao tác với tập tin Khoa CNTT | ĐH KHTN TP HCM Trang 5 pFile = fopen ( "myfile.bin" , "rb" ); if (pFile==NULL) {fputs ("File error",stderr); return;} // copy the file into the buffer: result = fread (buffer,1,255,pFile); if (result != lSize) {fputs ("Reading error",stderr); return;} fclose (pFile); return 0; } 2.2 Sử dụng namespace std  ofstream: class gồm các phương thức để ghi tập tin  ifstream: class gồm các phương thức để đọc tập tin  fstream: class gôm các phương thức cho cả thao tác đọc và ghi tập tin Ở đây chỉ giới thiệu fstream. 2.2.1 Một số hàm xử lý chung Tên phương thức Chức năng open Mở tập tin close Đóng tập tin is_open Kiểm tra xem tập tin có đang mở hay không. flush Làm sạch vùng đệm của tập tin đang mở good Kiểm tra trạng thái của tập tin có tốt để đọc/ghi không eof Kiểm tra xem đã đọc đến cuối tập tin chưa 2.2.2 Một số hàm xử lý cho tập tin văn bản Tên phương thức Chức năng operator >> Đọc dữ liệu từ tập tin operator << Ghi dữ liệu vào tập tin getline Đọc một dòng dữ liệu từ tập tin get Đọc một kí tự hoặc một chuỗi từ tập tin, tùy thuộc vào tham số của phương thức. put Ghi một kí tự xuống tập tin 2.2.3 Một số hàm xử lý cho tập tin nhị phân Tên phương thức Chức năng read Đọc mẫu tin (theo cấu trúc định trước) từ tập tin write Ghi mẫu tin (theo cấu trúc định trước ) vào tập tin seekg Di chuyển con trỏ file đến vị trí xác định tellp Cho biết vị trí hiện tại của con trỏ file
  • 6. Thao tác với tập tin Khoa CNTT | ĐH KHTN TP HCM Trang 6 Chi tiết của mỗi hàm có thể tham khảo trên MSDN hoặc link sau: http://www.cplusplus.com/reference/iostream/fstream/ 2.2.4 Ví dụ:  Ghi tập tin văn bản #include <iostream> #include <fstream> using namespace std; int main () { ofstream myfile; myfile.open ("example.txt"); myfile << "Writing this to a file.n"; myfile.close(); return 0; }  Đọc tập tin văn bản #include <iostream> #include <fstream> #include <string> using namespace std; int main () { string line; ifstream myfile ("example.txt"); if (myfile.is_open()) { while ( myfile.good() ) { myfile >> line; cout << line << endl; } myfile.close(); } else cout << "Unable to open file"; return 0; }  Ghi tập tin nhị phân #include <fstream>
  • 7. Thao tác với tập tin Khoa CNTT | ĐH KHTN TP HCM Trang 7 using namespace std; int main () { ifstream file ("example.bin", ios::out|ios::binary|ios::ate); char buffer[] = { 'x' , 'y' , 'z' }; if(file.is_open()) file.write(buffer , sizeof(buffer) ); file.close(); return 0; }  Đọc tập tin nhị phân // Đọc toàn bộ nội dung của tập tin #include <iostream> #include <fstream> using namespace std; ifstream::pos_type size; char * memblock; int main () { ifstream file ("example.bin", ios::in|ios::binary|ios::ate); if (file.is_open()) { size = file.tellg(); memblock = new char [size]; file.seekg (0, ios::beg); file.read (memblock, size); file.close(); cout << "the complete file content is in memory"; delete[] memblock; } else cout << "Unable to open file"; return 0; }