第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_tfread(void*buffer,size_tsize,size_tcount,file*stream );size_tfwrite(constvoid*buffer,size_tsize,size_tcount,file*stream );
呼叫fclose()關閉檔案指標。
使用crt操作檔案流程如圖6-1所示。
650) this.width=650;" height=303 big(this)?>
6.1.2 使用標準c++庫std::fstream
標準c++操作檔案主要是通過檔案流fstream來完成的。檔案輸入/輸出流用以實現檔案讀取和儲存的操作,這種基於流的檔案操作如圖6-2所示。
650) this.width=650;" height=235 big(this)?>
和檔案有關係的輸入/輸出類主要在標頭檔案中被定義。在這個標頭檔案中主要定義了3個類。由這3個類控制對檔案的各種輸入/輸出操作,它們分別是ifstream、ofstream、fstream。其中fstream類是由iostream類派生而來的,它們之間的繼承關係如圖6-3所示。
ofstream out("test.out"); out << "hello, world!";
650) this.width=650;" height=364 big(this)?>
除流操作符之外,fstream提供的檔案操作函式如表6-3所示。
表6-3
fstream
檔案操作函式
函式含義
open
開啟檔案
close
關閉檔案
is_open
判斷當前檔案是否已開啟
其中,open()函式具有多個原型:
voidopen(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 );
引數ios_base::openmode用以指定檔案的開啟方式,可以是如表6-4所示的標誌的組合。
表6-4
ios_base::openmode
標誌標誌
含義追加模式(
),新輸出的內容追加在原檔案內容的後面
ios::ate
檔案開啟後定位到檔案尾,
就包含此屬性
ios::binary
以二進位制方式開啟檔案,預設的方式是文字方式
ios::in
檔案以輸入方式開啟
ios::out
檔案以輸出方式開啟
ios::trunc
截斷模式(
truncate
),如果檔案存在,則把檔案長度設為
0ios::nocreate
如果檔案不存在則不建立
ios::noreplace
如果檔案已存在則不替換
如下羅列出使用fstream類進行檔案操作的流程。
呼叫fstream::fopen()建立、開啟檔案。
通過流操作,使用fstream完成輸入/輸出,如:out << "hello, world!"。
呼叫fstream::close()關閉檔案。
VC中檔案操作的幾種方式(1,2)
第6章 使用檔案訪問物件 檔案可以用來儲存一張 清明上河圖 一曲 春江花月夜 當然也可以儲存一部 紅樓夢 檔案的內容依賴於應用程式來解釋。幾乎所有的作業系統都通過檔案的介面允許使用者儲存 管理資料。所以,我們理所當然把檔案當做資料訪問介質的第一選擇。6.1 檔案操作的幾種方式 操作計算機的人都會接觸...
VC中檔案操作的幾種方式(1,2)
第6章 使用檔案訪問物件 檔案可以用來儲存一張 清明上河圖 一曲 春江花月夜 當然也可以儲存一部 紅樓夢 檔案的內容依賴於應用程式來解釋。幾乎所有的作業系統都通過檔案的介面允許使用者儲存 管理資料。所以,我們理所當然把檔案當做資料訪問介質的第一選擇。6.1 檔案操作的幾種方式 操作計算機的人都會接觸...
VC中檔案的操作
各種關於檔案的操作在程式設計中是十分常見,如果能對其各種操作都瞭如指掌,就可以根據實際情況找到最佳的解決方案,從而在較短的時間內編寫出高效的 因而熟練的掌握檔案操作是十分重要的。本文將對visual c 中有關檔案操作進行全面的介紹,並對在檔案操作中經常遇到的一些疑難問題進行詳細的分析。1 檔案的查...