C++中的文件輸入/輸出(3):掌握輸入/輸出流

發表于:2007-07-01來源:作者:點擊數: 標簽:
C++ 中的文件輸入 / 輸出 (3) 原作: Ilia Yordanov, 掌握輸入 / 輸出流 在這一章里,我會提及一些有用的函數。我將為你演示如何打開一個可以同時進行讀、寫操作的文件;此外,我還將為你介紹其它打開文件的方法,以及如何判斷打開操作是否成功。因此,請接

C++中的文件輸入/輸出(3)

原作:Ilia Yordanov, 

 

掌握輸入/輸出流

 

在這一章里,我會提及一些有用的函數。我將為你演示如何打開一個可以同時進行讀、寫操作的文件;此外,我還將為你介紹其它打開文件的方法,以及如何判斷打開操作是否成功。因此,請接著往下讀!

到目前為止,我已為你所展示的只是單一的打開文件的途徑:要么為讀取而打開,要么為寫入而打開。但文件還可以以其它方式打開。迄今,你應當已經認識了下面的方法:

 

ifstream OpenFile(“cpp-home.txt”);

 

噢,這可不是唯一的方法!正如以前所提到的,以上的代碼創建一個類ifstream的對象,并將文件的名字傳遞給它的構造函數。但實際上,還存在有不少的重載的構造函數,它們可以接受不止一個的參數。同時,還有一個open()函數可以做同樣的事情。下面是一個以上代碼的示例,但它使用了open()函數:

 

ifstream OpenFile;

OpenFile.open(“cpp-home.txt”);

 

你會問:它們之間有什么區別嗎?哦,我曾做了不少測試,結論是沒有區別!只不過如果你要創建一個文件句柄但不想立刻給它指定一個文件名,那么你可以使用open()函數過后進行指定。順便再給出一個要使用open()函數的例子:如果你打開一個文件,然后關閉了它,又打算用同一個文件句柄打開另一個文件,這樣一來,你將需要使用open()函數。

考慮以下的代碼示例:

 

#include <fstream.h>

 

void read(ifstream &T) //pass the file stream to the function

{  

//the method to read a file, that I showed you before

    char ch;

 

    while(!T.eof())

    {

       T.get(ch);

       cout << ch;

    }

   

    cout << endl << "--------" << endl;

}

 

void main()

{

    ifstream T("file1.txt");

    read(T);

    T.close();

 

    T.open("file2.txt");

    read(T);

    T.close();

}

 

據此,只要file1.txt和file2.txt并存儲了文本內容,你將看到這些內容。

現在,該向你演示的是,文件名并不是你唯一可以向open()函數或者構造函數(其實都一樣)傳遞的參數。下面是一個函數原型:

 

ifstream OpenFile(char *filename, int open_mode);

 

你應當知道filename表示文件的名稱(一個字符串),而新出現的則是open_mode(打開模式)。open_mode的值用來定義以怎樣的方式打開文件。下面是打開模式的列表:

名稱

描述

ios::in

打開一個可讀取文件

ios::out

打開一個可寫入文件

ios::app

你寫入的所有數據將被追加到文件的末尾,此方式使用ios::out

ios::ate

你寫入的所有數據將被追加到文件的末尾,此方式不使用ios::out

ios::trunk

刪除文件原來已存在的內容(清空文件)

ios::nocreate

如果要打開的文件并不存在,那么以此參數調用open()函數將無法進行。

ios::noreplace

如果要打開的文件已存在,試圖用open()函數打開時將返回一個錯誤。

ios::binary

以二進制的形式打開一個文件。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97