c++文件輸入輸出

字號(hào):

SaveFile.close(); —— 既然我們打開了一個(gè)流文件,那么當(dāng)我們用完它之后,就必須關(guān)閉它。SaveFile是ofstream類的一個(gè)對象,而該類(ofstream)有一個(gè)用于關(guān)閉文件的成員函數(shù),即close() 函數(shù)。因此,我們只要依次輸入文件句柄名,點(diǎn)號(hào)和close(),就可以關(guān)閉該文件!
    C++中的文件輸入/輸出(2):讀取文件
    讀取文件
    你已經(jīng)看到了應(yīng)該如何寫文件。現(xiàn)在,當(dāng)我們已經(jīng)得到cpp-home.txt文件時(shí),我們將要讀取它,并且將內(nèi)容打印在屏幕上。
    首先,我要指出的是,有很多種方法可以讀取文件。以后我會(huì)向你們介紹所有的方法(就我所知的)。此刻,我先向你展示的方法(我認(rèn)為的)。
    正如你已經(jīng)熟悉的——我將首先給出一段程序代碼,然后,我會(huì)詳細(xì)地對它進(jìn)行解釋說明:
    #i nclude
    void main() //程序從這里開始
    {
     ifstream OpenFile("cpp-home.txt");
     char ch;
     while(!OpenFile.eof())
     {
     OpenFile.get(ch);
     cout << ch;
     }
     OpenFile.close();
    }
    你想必已經(jīng)了解首行的意義所在,而剩下的部分將由我為你解釋。
    ifstream OpenFile(“cpp-home.txt”) —— 我猜它對現(xiàn)在的你而言多少會(huì)熟悉些!ifstream表示“input file stream(輸入文件流)”。在前一節(jié)的程序中,出現(xiàn)的則是ofstream,它的意義是“output file stream(輸出文件流)”。前一節(jié)的程序是進(jìn)行文件的寫操作,這就是它用“output(輸出)”來表示的原因。而本節(jié)的程序則是讀取一個(gè)文件,這就是它用“input(輸入)”來表示的原因。這一行剩下的代碼于你而言應(yīng)當(dāng)是熟悉的了:OpenFile是ifstream類的一個(gè)對象,它將關(guān)聯(lián)一個(gè)輸入文件流;而用引號(hào)括住的內(nèi)容,就是將要打開的文件的名稱。
    請注意:這里沒有對要打開的文件是否存在進(jìn)行測試!以后我將向你指出如何進(jìn)行檢測。
    char ch; —— 聲明一個(gè)字符數(shù)組(array of type char)。只是有一點(diǎn)要提醒你:這樣的數(shù)組(arrays)只能存儲(chǔ)一個(gè)ASCII字符。
    while(!OpenFile.eof()) —— 如果已經(jīng)到達(dá)文件末尾,eof( )函數(shù)將返回一個(gè)非零值。因此我們所設(shè)計(jì)的這個(gè)循環(huán)將一直持續(xù),直至我們的文件操作到達(dá)文件末尾。這樣我們就可以遍歷整個(gè)文件,以便對它進(jìn)行讀取。
    OpenFile.get(ch); —— OpenFile是類ifstream的一個(gè)對象。該類聲明了一個(gè)名為get( )的成員函數(shù)。只要我們擁有該對象,我們自然就可以調(diào)用這個(gè)函數(shù)。get( )函數(shù)從相應(yīng)的流文件中讀出一個(gè)字符,并將其返回給變量。在本例中,get( )函數(shù)只帶一個(gè)參數(shù)——用于存儲(chǔ)所讀取的字符的變量。所以,調(diào)用OpenFile.get(ch)后程序?qū)?huì)從OpenFile流中讀取一個(gè)字符并存入變量ch中。
    注意:如果你再次調(diào)用該函數(shù),它將讀取下一個(gè)字符,而不是原來的那一個(gè)!你過后將理解為什么會(huì)這樣。
    這就是我們要不斷反復(fù)循環(huán)直至讀操作到達(dá)文件尾的原因。每循環(huán)一次,我們將讀出一個(gè)字符并將它保存在ch中。
    cout << ch; —— 顯示ch變量值,它保存了讀取得到的字符。
    File.close(); —— 我們打開了一個(gè)流式文件,就需要關(guān)閉它。使用close()函數(shù)即可將它關(guān)閉,這和前一節(jié)的一樣!
    注意:一旦你關(guān)閉了一個(gè)文件,在你重新打開它之前,你不能再對它進(jìn)行訪問。
    大功告成了!我希望你能明白我的解釋。當(dāng)你編譯并運(yùn)行這個(gè)程序的時(shí)候,它應(yīng)當(dāng)會(huì)輸出:
    “Hello World, from www.cpp-home.com and Loobian!”
    C++中的文件輸入/輸出(3):掌握輸入/輸出流 
    掌握輸入/輸出流
    在這一章里,我會(huì)提及一些有用的函數(shù)。我將為你演示如何打開一個(gè)可以同時(shí)進(jìn)行讀、寫操作的文件;此外,我還將為你介紹其它打開文件的方法,以及如何判斷打開操作是否成功。因此,請接著往下讀!
    到目前為止,我已為你所展示的只是單一的打開文件的途徑:要么為讀取而打開,要么為寫入而打開。但文件還可以以其它方式打開。迄今,你應(yīng)當(dāng)已經(jīng)認(rèn)識(shí)了下面的方法:
    ifstream OpenFile(“cpp-home.txt”);
    噢,這可不是的方法!正如以前所提到的,以上的代碼創(chuàng)建一個(gè)類ifstream的對象,并將文件的名字傳遞給它的構(gòu)造函數(shù)。但實(shí)際上,還存在有不少的重載的構(gòu)造函數(shù),它們可以接受不止一個(gè)的參數(shù)。同時(shí),還有一個(gè)open()函數(shù)可以做同樣的事情。下面是一個(gè)以上代碼的示例,但它使用了open()函數(shù):
    ifstream OpenFile;
    OpenFile.open(“cpp-home.txt”);
    你會(huì)問:它們之間有什么區(qū)別嗎?哦,我曾做了不少測試,結(jié)論是沒有區(qū)別!只不過如果你要?jiǎng)?chuàng)建一個(gè)文件句柄但不想立刻給它指定一個(gè)文件名,那么你可以使用 open()函數(shù)過后進(jìn)行指定。順便再給出一個(gè)要使用open()函數(shù)的例子:如果你打開一個(gè)文件,然后關(guān)閉了它,又打算用同一個(gè)文件句柄打開另一個(gè)文件,這樣一來,你將需要使用open()函數(shù)。