C++中的檔案輸入/輸出(2)
原作:Ilia Yordanov, loobian@cpp-home.com
讀取檔案
你已經看到了應該如何寫檔案。現在,當我們已經得到cpp-home.txt檔案時,我們將要讀取它,並且將內容列印在螢幕上。
首先,我要指出的是,有很多種方法可以讀取檔案。以後我會向你們介紹所有的方法(就我所知的)。此刻,我先向你展示最佳的方法(我認為的)。
正如你已經熟悉的——我將首先給出一段程式碼,然後,我會詳細地對它進行解釋說明:
#include <fstream.h>
void main() //程式從這裡開始
{
ifstream OpenFile("cpp-home.txt");
char ch;
while(!OpenFile.eof())
{
OpenFile.get(ch);
cout << ch;
}
OpenFile.close();
}
你想必已經瞭解首行的意義所在,而剩下的部分將由我為你解釋。
ifstream OpenFile(“cpp-home.txt”) —— 我猜它對現在的你而言多少會熟悉些!ifstream表示“input file stream(輸入檔案流)”。在前一節的程式中,出現的則是ofstream,它的意義是“output file stream(輸出檔案流)”。前一節的程式是進行檔案的寫操作,這就是它用“output(輸出)”來表示的原因。而本節的程式則是讀取一個檔案,這就是它用“input(輸入)”來表示的原因。這一行剩下的代碼於你而言應當是熟悉的了:OpenFile是ifstream類的一個對象,它將關聯一個輸入檔案流;而用引號括住的內容,就是將要開啟的檔案的名稱。
請注意:這裡沒有對要開啟的檔案是否存在進行測試!以後我將向你指出如何進行檢測。
char ch; —— 聲明一個字元數組(array of type char)。只是有一點要提醒你:這樣的數組(arrays)只能儲存一個ASCII字元。
while(!OpenFile.eof()) —— 如果已經到達檔案末尾,eof( )函數將返回一個非零值。因此我們所設計的這個迴圈將一直持續,直至我們的檔案操作到達檔案末尾。這樣我們就可以遍曆整個檔案,以便對它進行讀取。
OpenFile.get(ch); —— OpenFile是類ifstream的一個對象。該類聲明了一個名為get( )的成員函數。只要我們擁有該對象,我們自然就可以調用這個函數。get( )函數從相應的流檔案中讀出一個字元,並將其返回給變數。在本例中,get( )函數只帶一個參數——用於儲存所讀取的字元的變數。所以,調用OpenFile.get(ch)後程式將會從OpenFile流中讀取一個字元並存入變數ch中。
注意:如果你再次調用該函數,它將讀取下一個字元,而不是原來的那一個!你過後將理解為什麼會這樣。
這就是我們要不斷反覆迴圈直至讀操作到達檔案尾的原因。每迴圈一次,我們將讀出一個字元並將它儲存在ch中。
cout << ch; —— 顯示ch變數值,它儲存了讀取得到的字元。
File.close(); —— 我們開啟了一個流式檔案,就需要關閉它。使用close()函數即可將它關閉,這和前一節的一樣!
注意:一旦你關閉了一個檔案,在你重新開啟它之前,你不能再對它進行訪問。
大功告成了!我希望你能明白我的解釋。當你編譯並運行這個程式的時候,它應當會輸出:
“Hello World, from www.cpp-home.com and Loobian!”