///输入/输出流
///到目前为止,所展示的只是单一的打开文件的途径:要么为读取而打开,要么为写入而打开。
///但文件还可以以其它方式打开。迄今,你应当已经认识了下面的方法:
///ifstream OpenFile(“love.txt”);
///这可不是唯一的方法!以上的代码创建一个类ifstream的对象,并将文件的名字传递给它的构造函数。
///但实际上,还存在有不少的重载的构造函数,它们可以接受不止一个的参数。
///同时,还有一个open()函数可以做同样的事情。下面是一个以上代码的示例,
///但它使用了open()函数:
///ifstream OpenFile;
///OpenFile.open("love.txt");
///它们之间没有区别!
///只不过如果你要创建一个文件句柄但不想立刻给它指定一个文件名,那么你可以使用open()函数
///过后进行指定。顺便再给出一个要使用open()函数的例子:如果你打开一个文件,然后关闭了它,
///又打算用同一个文件句柄打开另一个文件,这样一来,你将需要使用open()函数。
///考虑以下的代码示例:
/*
#include <fstream>
#include<iostream>
using namespace std;
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;
}
int main()
{
ifstream T("file1.txt");
read(T);
T.close();
T.open("file2.txt");
read(T);
T.close();
T.open("love.txt");
read(T);
T.close();
return 0;
}
*/
///只要file1.txt和file2.txt并存储了文本内容,你将看到这些内容。
/*
taek woon oppa salanghei!!!
--------
gikwang oppa salanghei!!!
--------
Woohyun oppa salanghei!!!
--------
Process returned 0 (0x0) execution time : 0.264 s
Press any key to continue.
*/
///文件名并不是你唯一可以向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
以二进制的形式打开一个文件。
*/
///下面是一个关于如何使用打开模式的例子:
/*
#include <fstream>
#include<iostream>
using namespace std;
int main()
{
ofstream SaveFile("file1.txt", ios::ate);
SaveFile << "That's new!\n";
SaveFile.close();
return 0;
}
*/
///正如你在表中所看到的:使用ios::ate将会从文件的末尾开始执行写入。如果我没有使用它,
///原来的文件内容将会被重新写入的内容覆盖掉。不过既然我已经使用了它,那么我只会在原文件的末尾
///进行添加。所以,如果file1.txt原有的内容是这样:
///yosoep oppa salanghei !!!
///那么执行上面的代码后,程序将会为它添上“That’s new!”,因此它看起来将变成这样:
///yosoep oppa salanghei!!!That’s new!
///*********!!!但是 但是 我的输出 却是 : That’s new! ******************晕晕晕****