您的位置:首页 > 编程语言 > C语言/C++

c++ 文件的输入输出流

2012-09-03 16:51 218 查看
翻译自:http://www.cplusplus.com/doc/tutorial/files/

c++提供了下列的类用来处理文件的输入输出:

ofstream:处理文件输出流的类

ifstream:处理文件输出流的类

fstream:同时处理文件输入输出的类

这些类直接或间接地衍生自istream或ostream类,我们已经在前面学习过这些类,我们使用了他们的对象cin,cout。我们可以像使用cin,cout一样来操作我们的文件流。不同的是,我们处理的是物理设备上的文件。让我们瞧一下下面的例子。

// basic file operations
#include <iostream>
#include <fstream>
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);


文件处理的三个类中有一个默认的标志位,如下:

classdefault mode parameter
ofstreamios::out
ifstreamios::in
fstreamios::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 <iostream>
#include <fstream>
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 <iostream> #include <fstream> #include <string> 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()

功能不在此处多说了!

获取和设置流指针:

未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: