Tải bản đầy đủ (.pdf) (7 trang)

Cách Truy Xuất Đến File Trong C++

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (486.38 KB, 7 trang )


Đạ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:

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:

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;
}

×