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