第6章 使用檔案訪問物件
檔案可以用來儲存一張《清明上河圖》,一曲《春江花月夜》,當然也可以儲存一部《紅樓夢》,檔案的內容依賴於應用程式來解釋。幾乎所有的作業系統都通過檔案的介面允許使用者儲存、管理資料。所以,我們理所當然把檔案當做資料訪問介質的第一選擇。
6.1 檔案操作的幾種方式
操作計算機的人都會接觸到檔案,檔案的操作通常包括檔案的讀取、修改,有的時候我們還需要對檔案進行外部管理,包括檔案複製、刪除及屬性設定等。
6.1.1 使用crt函式std::f***()
檔案操作可以採用c語言執行時期庫來完成,crt提供的f***()函式如表6-1所示。
表6-1 crt檔案操作函式 函式
含義fopen
開啟指定檔名的檔案
fread
從檔案中讀取指定長度的資料
fwrite
向檔案中寫入指定的資料
fclose
關閉檔案
feof
判斷是否達到檔案結尾
fgetc
從文字檔案中讀取乙個字元
fgets
從文字檔案中讀取乙個字串
fputc
向文字檔案中寫入乙個字元
fputs
向文字檔案中寫入乙個字串
當我們開啟、建立乙個檔案時,常常需要呼叫fopen()函式,該函式的原型為:
file *fopen(引數解釋constchar *filename,
constchar *mode
);
filename:指定檔案的檔名,如test.out。
mode:指定檔案的操作方式,如表6-2所示。
表6-2 fopen檔案操作方式 標誌
含義r讀模式,如果檔案不存在則會失敗
w寫模式,如果檔案已存在則會清空其內容
a追加模式,寫入的內容追加在原有內容之後,
如果檔案不存在則會自動建立
r+讀寫模式(檔案必須存在)
w+讀寫模式,如果檔案已存在則會清空其內容
a+讀+追加模式
t文字方式
b二進位制方式
ccs=encoding
檔案編碼方式,可指定encoding 為
utf-8、utf-16le、unicode
檔案的操作方式可以是如上標誌的組合,如:r+b。當採用"ccs=encoding"時,我們需要在前面新增乙個","作為分隔。如我們以讀寫方式、unicode編碼開啟某個檔案:
fopen("newfile.txt", "rw, ccs=unicode");如下羅列出使用crt函式進行檔案操作的流程。
使用fopen()建立、開啟檔案,返回乙個檔案指標file *;
以file *作為引數,呼叫fread()、fwrite()等操作函式完成對檔案的讀寫。fread()、fwrite()函式的原型為:
size_t fread(呼叫fclose()關閉檔案指標。void*buffer,
size_t size,
size_t count,
file *stream
);
size_t fwrite(
const
void*buffer,
size_t size,
size_t count,
file *stream
);
使用crt操作檔案流程如圖6-1所示。
6.1.2 使用標準c++庫std::fstream
標準c++操作檔案主要是通過檔案流fstream來完成的。檔案輸入/輸出流用以實現檔案讀取和儲存的操作,這種基於流的檔案操作如圖6-2所示。
和檔案有關係的輸入/輸出類主要在標頭檔案中被定義。在這個標頭檔案中主要定義了3個類。由這3個類控制對檔案的各種輸入/輸出操作,它們分別是ifstream、ofstream、fstream。其中fstream類是由iostream類派生而來的,它們之間的繼承關係如圖6-3所示。
如果需要使用fstream,則需要包含標頭檔案,與iostream不同的是,fstream需要和指定的檔名相關聯,如:
除流操作符之外,fstream提供的檔案操作函式如表6-3所示。
表6-3
fstream檔案操作函式
函式含義
open
開啟檔案
close
關閉檔案
is_open
判斷當前檔案是否已開啟
其中,open()函式具有多個原型:
voidopen(引數ios_base::openmode用以指定檔案的開啟方式,可以是如表6-4所示的標誌的組合。constchar *_filename,
ios_base::openmode _mode = ios_base::in | ios_base::out,
int _prot = (int)ios_base::_openprot
);
voidopen(
constchar *_filename,
ios_base::openmode _mode
);
voidopen(
constwchar_t *_filename,
ios_base::openmode _mode = ios_base::in | ios_base::out,
int _prot = (int)ios_base::_openprot
);
voidopen(
constwchar_t *_filename,
ios_base::openmode _mode
);
表6-4
ios_base::openmode標誌
標誌含義
ios::ate
ios::binary
以二進位制方式開啟檔案,預設的方式是文字方式
ios::in
檔案以輸入方式開啟
ios::out
檔案以輸出方式開啟
ios::trunc
截斷模式(truncate),如果檔案存在,則把檔案長度設為0
ios::nocreate
如果檔案不存在則不建立
ios::noreplace
如果檔案已存在則不替換
如下羅列出使用fstream類進行檔案操作的流程。
呼叫fstream::fopen()建立、開啟檔案。
通過流操作,使用fstream完成輸入/輸出,如:out << "hello, world!"。
呼叫fstream::close()關閉檔案。
====未完待續====
以上摘自《把脈vc++》
如果你想與我交流,如下鏈結加我為好友:
VC中檔案操作的幾種方式(1,2)
第6章 使用檔案訪問物件 檔案可以用來儲存一張 清明上河圖 一曲 春江花月夜 當然也可以儲存一部 紅樓夢 檔案的內容依賴於應用程式來解釋。幾乎所有的作業系統都通過檔案的介面允許使用者儲存 管理資料。所以,我們理所當然把檔案當做資料訪問介質的第一選擇。6.1 檔案操作的幾種方式 操作計算機的人都會接觸...
VC中檔案操作的幾種方式(1,2)
第6章 使用檔案訪問物件 檔案可以用來儲存一張 清明上河圖 一曲 春江花月夜 當然也可以儲存一部 紅樓夢 檔案的內容依賴於應用程式來解釋。幾乎所有的作業系統都通過檔案的介面允許使用者儲存 管理資料。所以,我們理所當然把檔案當做資料訪問介質的第一選擇。6.1 檔案操作的幾種方式 操作計算機的人都會接觸...
VC中檔案的操作
各種關於檔案的操作在程式設計中是十分常見,如果能對其各種操作都瞭如指掌,就可以根據實際情況找到最佳的解決方案,從而在較短的時間內編寫出高效的 因而熟練的掌握檔案操作是十分重要的。本文將對visual c 中有關檔案操作進行全面的介紹,並對在檔案操作中經常遇到的一些疑難問題進行詳細的分析。1 檔案的查...