Cách ghi dữ liệu lên file trong VC++?

15.599

Trả lời :
Bản thân ngôn ngữ lập trình không cung cấp trực tiếp các lệnh truy xuất tài nguyên nói chung và truy xuất file nói riêng. Việc hỗ trợ truy xuất tài nguyên của máy là nhiệm vụ của các thư viện. Nếu lập trình bằng VC++, bạn có thể truy xuất file bằng cách gọi các hàm thư viện ở nhiều cấp độ khác nhau, từ cấp thấp đến cấp cao thông qua các đối tượng. 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,...)
 
 //----------------------------------
 //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,...).
 
 //----------------------------------
 //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.
 
 #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.
 
 //đị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); 
 
0--1

Liên hệ xóa tin: [email protected]