翻译自:
c++提供了下列的类用来处理文件的输入输出:
ofstream:处理文件输出流的类
ifstream:处理文件输出流的类
fstream:同时处理文件输入输出的类
这些类直接或间接地衍生自istream或ostream类,我们已经在前面学习过这些类,我们使用了他们的对象cin,cout。我们可以像使用cin,cout一样来操作我们的文件流。不同的是,我们处理的是物理设备上的文件。让我们瞧一下下面的例子。
// basic file operations#include#include using namespace std;int main () { ofstream myfile; myfile.open ("example.txt"); myfile << "Writing this to a file.\n"; myfile.close(); return 0;}
这个程序创建了一个叫做"example.txt"的文件,并且写入了一串字符。
我们一步一步的向下进行:
打开一个文件
创建一个与文件关联的对象。并使用open函数打开文件。
open(filename,mode)
filename在这里不在赘述,重点介绍一下mode:
ios::in | 为输入打开 |
ios::out | 为输出打开 |
ios::binary | 以二进制打开 |
ios::ate | 打开文件,并移至文件尾部 |
ios::app | 追加的文件结尾 |
ios::trunc | 如果问价存在,则截断文件 |
可以逻辑运算符OR(|)合并标志(mode)位,如下:
ofstream myfile;myfile.open ("example.bin", ios::out | ios::app | ios::binary);
文件处理的三个类中有一个默认的标志位,如下:
class | default mode parameter |
---|---|
ofstream | ios::out |
ifstream | ios::in |
fstream | ios::in | ios::out |
我们也可以采用以下的方式进行打开文件,可以完美合并open函数跟构造函数。
ofstream myfile ("example.bin", ios::out | ios::app | ios::binary);
打开完成之后,我们可以使用如下方式测试问价是否打开成功:
if (myfile.is_open()) { /* ok, proceed with output */ }
关闭文件
myfile.close();
文本文件流
文本文件流是在标志中不含有ios:binary的文件流,它 的大致输入输出如下:
输入:
// writing on a text file#include#include using namespace std;int main () { ofstream myfile ("example.txt"); if (myfile.is_open()) { myfile << "This is a line.\n"; myfile << "This is another line.\n"; myfile.close(); } else cout << "Unable to open file"; return 0;}
输入:
// reading a text file #include#include #include using namespace std;int main () { string line; ifstream myfile ("example.txt"); if (myfile.is_open()) { while ( myfile.good() ) //处于就绪状态 { getline (myfile,line); cout << line << endl; } myfile.close(); } else cout << "Unable to open file"; return 0;}
测试状态:
除了good()检查状态,还有其他的一些测试函数。
bad()
fail()
eof()
good()
功能不在此处多说了!
获取和设置流指针:
未完待续