類進行檔案的 I O 處理

2021-04-09 07:25:56 字數 1884 閱讀 4627

大多數 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...