Trao đổi với tôi

http://www.buidao.com

6/4/10

[VC++] Ghi dữ liệu lên file

Hai dạng file phổ biến là file văn bản và file nhị phân, trong đó dạng file nhị phân là tổng quát nhất.

Nếu muốn ghi dữ liệu nhị phân ra file, bạn hãy tham khảo chương trình nhỏ sau đây, nó demo việc tạo file mới rồi ghi 1 chuỗi byte trong biến dữ liệu ra file thông qua việc gọi các hàm trong thư viện io.h cấp thấp (_open,_write, _read, close,...)

Code:
 //----------------------------------
//Chương trình này mở file để lưu dữ liệu
//rồi lưu 1 chuỗi dữ liệu của biến buffer ra file
//----------------------------------
//include các file đặc tả thư viện cần dùng
#include
#include
#include
#include
#include
#include
//định nghĩa biến chứa dữ liệu cần lưu
char buffer[] = "This is a test of '_write' function";
//điểm nhập của ứng dụng
void main (void) {
int fh;
unsigned byteswritten;
//mở file để ghi dữ liệu nhị phân
if((fh = _open("write.o", _O_RDWR | _O_CREAT, _S_IREAD | _S_IWRITE )) != -1) {
//ghi dữ liệu ra file
if((byteswritten = _write(fh, buffer, sizeof(buffer))) == -1)
perror("Write failed");
else
printf("Wrote %u bytes to file\n", byteswritten);
//đóng file
_close (fh);
}
}
Nếu muốn ghi dữ liệu văn bản ra file, bạn hãy tham khảo chương trình nhỏ sau đây, nó demo việc tạo file mới, định dạng dữ liệu cần ghi thành chuỗi văn bản rồi ghi chuỗi kết quả ra file thông qua việc gọi các hàm trong thư viện chuẩn stdio.h (fopen,fprintf, fclose,...).
Code:
 //----------------------------------
//Chương trình này mở file để lưu dữ liệu
//rồi định dạng các dữ liệu cần ghi thành dạng văn bản
//rồi lưu chuỗi văn bản ra file
//----------------------------------
//include các file đặc tả thư viện cần dùng
#include
#include
FILE *stream;
//điểm nhập của ứng dụng
void main (void) {
//định nghĩa các biến chứa dữ liệu cần lưu
int i = 10;
double fp = 1.5;
char s[] = "this is a string";
char c = '\n';
//mở file để ghi chuỗi
stream = fopen ("fprintf.out", "w");
//định dạng dữ liệu thành văn bản rồi ghi kết quả
fprintf (stream, "%s%c", s, c);
//định dạng dữ liệu thành văn bản rồi ghi kết quả
fprintf (stream, "%d\n", i);
//định dạng dữ liệu thành văn bản rồi ghi kết quả
fprintf (stream, "%f\n", fp);
//đóng file lại
fclose (stream);
//gọi tiện ích type của hệ thống hiển thị nội dung file lên mà hình
system("type fprintf.out");
}
Nếu muốn đọc/ghi dữ liệu vào/ra file theo trường phái hướng đối tượng, bạn hãy tham khảo chương trình nhỏ sau đây, nó demo việc dùng đối tượng ofstream trong thư viện fstream.h để tạo file mới (dạng nhị phân hay dạng văn bản đều được), rồi ghi dữ liệu của ứng dụng ra file bằng cách gởi thông diệp đến tác vụ tương ứng của đối tượng file.
Code:
 #include 
//định nghĩa kiểu dữ liệu người dùng
struct Date {
int mo, da, yr;
};
//điểm nhập ứng dụng
void main() {
//định nghĩa biến dữ liệu cần ghi
Date dt = { 6, 10, 92 };
//tạo đối tượng miêu tả file cần ghi
ofstream tfile ("date.dat", ios::binary);
//ghi dữ liệu bằng tác vụ write
tfile.write ((char *)&dt, sizeof dt);
}
Nếu muốn đọc/ghi dữ liệu vào/ra file bằng các hàm API Windows hầu sử dụng khả năng quản lý việc dùng chung file bởi nhiều ứng dụng chạy đồng thời, bạn hãy tham khảo chương trình nhỏ sau đây, nó demo việc dùng các hàm API Windows để tạo file mới (dạng nhị phân hay dạng văn bản đều được), rồi ghi dữ liệu của ứng dụng ra file.
Code:
 //định nghĩa kiểu dữ liệu người dùng
struct Date {
int mo, da, yr;
};
//định nghĩa các biến cần dùng
HANDLE hFile;
DWORD dwBytesWritten;
//định nghĩa biến dữ liệu cần ghi
Date dt = { 6, 10, 92 };
//tạo file để đọc/ghi
hFile = CreateFile("outdata.bin", // file name
GENERIC_READ | GENERIC_WRITE, // open for read/write
0, // do not share
NULL, // no security
CREATE_ALWAYS, // overwrite existing file
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template

//kiểm tra kết quả
if (hFile == INVALID_HANDLE_VALUE) {
ErrorHandler("Could not create temporary file.");
}
//ghi nội dung ra file
WriteFile(hFile, &dt, sizeof(dt),
&dwBytesWritten, NULL);
//đóng file lại.
CloseHandle(hFile);
Theo PCWorld