大多數 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,它有很多自己的檔案處理類。這些庫一般都...
利用I O進行檔案的拷貝 合併 拆分
一 檔案的拷貝 1 提供能夠訪問到被拷貝檔案及目標檔案的準確路徑 2 驗證所提供的被拷貝檔案路徑是否正確是否為空 3 檢查是否存在目標檔案的父路徑,若不存在,需重新建立 4 將所提供的路徑轉換成file物件 5 開始拷貝 以下是具體 實現 public static void copy string...
用Python進行檔案批處理例項
import sys import os import re from pyltp import sentencesplitter,segmentor,postagger,parser,namedentityrecognizer,sementicrolelabeller rootdir d user...