如何使用 類進行檔案的 I O 處理

2021-04-18 17:05:23 字數 1867 閱讀 1237

大多數 c++ 程式設計師都熟悉不止乙個檔案 i/o 庫。首先是傳統的 unix 風格的庫,它由一些低階函式如 read() 和 open()組成。其次是 ansi c 的 庫,它包含 fopen() 和 fread()等函式。其它的還有一些具備所有權的庫或框架,比如 mfc,它有很多自己的檔案處理類。   這些庫一般都很難跨平台使用。更糟的是,上述提到的 c 庫由於其程式介面的原因,在很大程度上強制程式設計師進行某些處理,而且缺乏型別安全支援。   標準 c++ 提供提供了乙個增強的、物件導向的、具有國際化意識的  庫。這個庫包含一系列派生於標準 ios_base 和 ios 類的類模板。因此, 提供了高階的自動控制機制和健壯性。本文下面將示範如何使用  類實現檔案的輸入/輸出處理: 第一步:建立檔案流   輸入檔案流(ifstream)支援過載的 >> 操作符,同樣,輸出檔案流(ofstream)支援過載的 << 操作符。結合了輸入和輸出的檔案流被稱為 fstream。下面的程式建立了乙個 ifstream 物件:dict,並將該物件中的每乙個單字顯示到螢幕上:

#include #include #include #include using namespace std;

int main()

我們必須呼叫 string::c_str() 成員函式,因為 fstream 物件只接受常量字串作為檔名。當你將檔名作為引數傳遞時,建構函式試圖開啟指定的檔案。接著,我們用過載的 !操作符來檢查檔案的狀態。如果出錯,該操作符估值為 true。最後一行是個迴圈,每次反覆都從檔案讀取乙個單字,將它拷貝到 s,然後顯示出來。注意我們不必顯式地檢查 eof,因為過載操作符 >> 會自動處理。此外,我們不用顯式地關閉此檔案,因為析構函式會為我們做這件事情。   過時和荒廢的 庫支援 ios::nocreate 和 ios::noreplace 標誌。但新的 庫已經取代了 並不再支援這兩個標誌。   檔案的開啟模式   如果你不顯式指定開啟模式,fstream 類將使用預設值。例如,ifstream 預設以讀方式開啟某個檔案並將檔案指標置為檔案的開始處。為了向某個檔案寫入資料,你需要建立乙個 ofstream 物件。定義了下列開啟模式和檔案屬性:

ios::ate // 開啟並找到檔案尾

ios::binary // 二進位制模式 i/o (與文字模式相對)

ios::in // 唯讀開啟

ios::out // 寫開啟

ios::trunc // 將檔案截為 0 長度

你可以用位域操作符 or 組合這些標誌:

fstream 型別物件同時支援讀和寫操作:

fstream logfile("database.dat", ios::in | ios::out);
第二步:設定檔案的位置   檔案具備乙個邏輯指標,它指向該檔案中的某個偏移位置。你可以通過呼叫seekp()成員函式,以位元組為單位將這個指標定位到檔案的任意位置。為了獲取從檔案開始處到當前偏移的位元組數,呼叫seekp()即可。在下面的例子中,程式將檔案位置前移10個位元組,然後呼叫 tellp()報告新位置:

ofstream fout("parts.txt");

fout.seekp(10); // 從0偏移開始前進 10 個位元組

cout<<"new position: "<

你可以用下面的常量重新定位文ian指標:

ios::beg // 檔案開始位置

ios::cur // 當前位置,例如: ios::cur+5

ios::end // 檔案尾

第三步:讀寫資料   fstream 類為所有內建資料型別以及 std::string 和 std::complex 型別過載 << 和 >> 操作符。下面的例子示範了這些操作符的使用方法:

fstream logfile("log.dat"); 

logfile<>login>>user; // 讀取以前寫入的值

類進行檔案的 I O 處理

大多數 c 程式設計師都熟悉不止乙個檔案 i o 庫。首先是傳統的 unix 風格的庫,它由一些低階函式如 read 和 open 組成。其次是 ansi c 的 庫,它包含 fopen 和 fread 等函式。其它的還有一些具備所有權的庫或框架,比如 mfc,它有很多自己的檔案處理類。這些庫一般都...

如何使用Shell進行檔案監控?

檔案監控可以配合rsync實現檔案自動同步,例如監聽某個目錄,當檔案變化時,使用rsync命令將變化的檔案同步。可用於 自動發布 inotify 是linux核心的乙個特性,在核心 2.6.13 以上都可以使用。如果在shell環境下,可以安裝 yum install inotify tools,安...

python使用magic模組進行檔案型別識別方法

例項 python magic是libmagic檔案型別識別庫的python介面。libmagic通過根據預定義的檔案型別列表檢查它們的標頭檔案來識程式設計客棧別檔案型別。這個功能通過unix命令檔案暴erixmulh露給命令列。import magic magic.from file testda...