6.1.5 文本文件與二進制文件
文本文件與二進制文件實際上沒有太大的區別,一般來講,文本文件僅用來存儲可打印字符(如:字母、數字、空格等),文本文件也可以以二進制方式打開,如圖6-6所示的是在UltraEdit-32中以二進制的方式查看文本文件的情形。
(點擊查看大圖)圖6-6 文本文件的二進制查看方式 |
(點擊查看大圖)圖6-7 文本文件中的"65" |
(點擊查看大圖)圖6-8 二進制文件中的數值65 |
可以看出,文本格式和二進制格式還是有差別的。如果以文本方式寫入"65",而以二進制文件讀取的話,則會認爲它的值爲0x3635,這樣,就會給軟件程序帶來致命的差錯。
在Windows API世界裏,根本就沒有所謂的文本文件的讀寫函數,所有的緩衝內容的訪問都是通過char *指針完成的,至於其內容是文本還是二進制,則是應用程序的責任了。
現在動手
編寫如下程序,體驗文本與二進制內容的存取操作。
【程序 6-2】文本與二進制內容的存儲
- 01 #include "stdafx.h"
- 02
- 03 int main()
- 04 {
- 05 char s1[4] = "65";
- 06 int n1 = 65;
- 07
- 08 //寫
- 09 CFile file;
- 10 file.Open(_T("test.out"),
CFile::modeWrite | CFile::modeCreate);- 11
- 12 //寫入文本"65"
- 13 file.Write(s1, sizeof(s1));
- 14 //寫入數值65
- 15 file.Write(&n1, sizeof(n1));
- 16
- 17 file.Close();
- 18
- 19 //讀
- 20 file.Open(_T("test.out"), CFile::modeRead);
- 21 char s2[4];
- 22 int n2;
- 23
- 24 //先讀文本,再讀數值
- 25 file.Read(s2, sizeof(s2));
- 26 file.Read(&n2, sizeof(n2));
- 27
- 28 printf("s2=%s\r\n", s2);
- 29 printf("n2=%d\r\n", n2);
- 30
- 31 //先讀數值,再讀文本
- 32 file.SeekToBegin();
- 33 file.Read(&n2, sizeof(n2));
- 34 file.Read(s2, sizeof(s2));
- 35
- 36 printf("s2=%s\r\n", s2);
- 37 printf("n2=%d\r\n", n2);
- 38
- 39 file.Close();
- 40 return 0;02 }
運行結果如圖6-9所示。
這個例子告訴我們:在讀文件時,其順序應該和寫文件的順序一致,否則會帶來不可預測的錯誤。
光盤導讀
該項目對應於光盤中的目錄"\ch06\CFileTest"。
====未完待續====
以上摘自《把脈VC++》第6.1小節的內容 ,轉載請註明出處。