檔案的讀寫

2021-09-25 04:34:41 字數 2629 閱讀 8580

目錄

1. 開啟檔案

2. 從檔案中讀資料

3. 以字串string的方式逐行讀寫檔案

4. 逐個字元讀入(忽略空格與回車)

5. 逐個字元讀入(包括空格與回車)

6.快取和同步(buffers and synchronization)

7. 參考

這裡主要討論fstream的內容

#include ofstream         //檔案寫操作 記憶體寫入儲存裝置 

ifstream //檔案讀操作,儲存裝置讀區到記憶體中

fstream //讀寫操作,對開啟的檔案可進行讀寫操作

public member function

void open ( const char * filename,

ios_base::openmode mode = ios_base::in | ios_base::out );

void open(const wchar_t *_filename,

ios_base::openmode mode= ios_base::in | ios_base::out,

引數: filename   操作檔名

mode        開啟檔案的方式

prot         開啟檔案的屬性                            //基本很少用到,在檢視資料時,發現有兩種方式

開啟檔案的方式在ios類(所以流式i/o的基類)中定義,有如下幾種方式:

ios::in

為輸入(讀)而開啟檔案

ios::out

為輸出(寫)而開啟檔案

ios::ate

初始位置:檔案尾

所有輸出附加在檔案末尾

ios::trunc

如果檔案已存在則先刪除該檔案

ios::binary

二進位制方式

這些方式是能夠進行組合使用的,以「或」運算(「|」)的方式:例如

ofstream out;

out.open("hello.txt", ios::in|ios::out|ios::binary) //根據自己需要進行適當的選取

#include #include #include int main () 

while (!in.eof() )

return 0;

}//結果 在螢幕上輸出

this is a line.

this is another line

上面的例子讀入乙個文字檔案的內容,然後將它列印到螢幕上。注意我們使用了乙個新的成員函式叫做eof ,它是ifstream 從類 ios 中繼承過來的,當到達檔案末尾時返回true 。

狀態標誌符的驗證(verification of state flags)

除了eof()以外,還有一些驗證流的狀態的成員函式(所有都返回bool型返回值):

如果在讀寫過程**錯,返回 true 。例如:當我們要對乙個不是開啟為寫狀態的檔案進行寫入時,或者我們要寫入的裝置沒有剩餘空間的時候。

除了與bad() 同樣的情況下會返回 true 以外,加上格式錯誤時也返回true ,例如當想要讀入乙個整數,而獲得了乙個字母的時候。

如果讀檔案到達檔案末尾,返回true。

這是最通用的:如果呼叫以上任何乙個函式返回true 的話,此函式返回 false 。

要想重置以上成員函式所檢查的狀態標誌,你可以使用成員函式clear(),沒有引數。

ifstream infile; 

infile.open(file.data()); //將檔案流物件與檔案連線起來

assert(infile.is_open()); //若失敗,則輸出錯誤訊息,並終止程式執行

//ifstream myfile("cleardata_voc2.txt");

string s;

while(getline(infile,s))

{ cout<> c;

cout<> noskipws;

while (!infile.eof())

{infile>>c;

cout<

當我們對檔案流進行操作的時候,它們與乙個streambuf 型別的快取(buffer)聯絡在一起。這個快取(buffer)實際是一塊記憶體空間,作為流(stream)和物理檔案的媒介。例如,對於乙個輸出流, 每次成員函式put (寫乙個單個字元)被呼叫,這個字元不是直接被寫入該輸出流所對應的物理檔案中的,而是首先被插入到該流的快取(buffer)中。

當快取被排放出來(flush)時,它裡面的所有資料或者被寫入物理媒質中(如果是乙個輸出流的話),或者簡單的被抹掉(如果是乙個輸入流的話)。這個過程稱為同步(synchronization),它會在以下任一情況下發生:

1. 2. 

3. 

檔案的讀寫

eg 文字中每一行的資料結構,它們是以tab鍵為間隔的 afghanistan baghlan 36.12 68.7 afghanistan balkh 36.758 66.896 include stdafx.h include fstream include using namespace st...

檔案的讀寫

為了讀而開啟檔案,要建立乙個ifstream物件,他的用發與cin相同,為了寫而開啟檔案,要建立乙個ofstream物件,用法與cout相同。一旦開啟乙個檔案,就可以像處理其他iostream物件那樣對它進行讀寫。在iosream庫中,乙個十分有用的函式是getline 用它可以讀入到string物...

檔案的讀寫

對於檔案的讀寫有各種形式,如位元組流讀寫,字元流讀寫,在字元流之上的緩衝流的讀寫,對於這幾種流的讀寫各有優點,各有不足吧 首先介紹一下位元組輸入輸出流 fileinputstream fiieoutputstream 對檔案的操作 將檔案aa.txt中的內容讀取出來放到bb.txt檔案中。首先以乙個...