没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
C++ 文件 操作详解
C++ 通过以下几个类支持文件的输入输出:
• ofstream: 写操作(输出)的文件类 ( 由 ostream 引申而来 )
• ifstream: 读操作(输入)的文件类 ( 由 istream 引申而来 )
• fstream: 可同时读写操作的文件类 ( 由 iostream 引申而来 )
打开文件 (Open a file)
对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来, 也就是 说
打开一个文件。被打开的文件在程序中由一个流对象 (stream object) 来表示 ( 这些类的一
个实例 ) ,而对这个流对象所做的任何输入输出操作实际就是对该文件所做的操作。
要通过一个流对象打开一个文件,我们使用它的成员函数 open()
:
void open (const cha r
* filename, openmode mode);
这里 filename 是一个字符串,代表要打开的文件名, mode 是以下标志符的一个组合:
这些标识符可以被组合使用, 中间以 ” 或 ” 操作符 (|) 间隔。 例如, 如果我们想要以二 进
制方式打开文件 "example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数
open ()来实现: ofstream file;
file.open ("example.bin", ios::out | ios::app | ios::binary);
ofstream, ifstream 和 fstream 所有这些类的成员函数 open 都包含了一个默认打开文件
的方式,这三个类的默认方式各不相同:
ios::in
为输入 ( 读 ) 而打开文件
ios::out
为输出 ( 写 ) 而打开文件
ios::ate
初始位置:文件尾
ios::app
所有输出附加在文件末尾
ios::trunc
如果文件已存在则先删除该文件
ios::binary
二进制方式
类
参数的默认方式
ofstrea
m
ios::out |
ios::trunc
ifstream
ios::in
fstream
ios::in | ios::out
只有当函数被调用时没有声明方式参数的情况下, 默认值才会被采用。 如果函数被调 用
时声明了任何参数,默认值将被完全改写,而不会与调用参数组合。
由于对类 ofstream, ifstream 和 fstream 的对象所进行的第一个操作通常都是打开
文件,这些类都有一个构造函数可以直接调用 open 函数,并拥有同样的参数。这样,我 们
就可以通过以下方式进行与上面同样的定义对象和打开文件的操作: ofstream file
("example.bin", ios::out | ios::app | ios::binary);
两种打开文件的方式都是正确的。
你可以通过调用成员函数 is_open() 来检查一个文件是否已经被顺利的打开了: bool
is_open();
它返回一个布尔 (bool) 值,为真( true )代表文件已经被顺利打开,假 ( false ) 则相反。
关闭文件 (Closing a file)
当文件读写操作完成之后, 我们必须将文件关闭以使文件重新变为可访问的。 关闭文 件
需要调用成员函数 close() , 它负责将缓存中的数据排放出来并关闭文件。 它的格式很简
单:
void close ();
这个函数一旦被调用, 原先的流对象 (stream object) 就可以被用来打开其它的文件了
,
这个文件也就可以重新被其它的进程 (process) 所有访问了。
为防止流对象被销毁时还联系着打开的文件, 析构函数 (destructor) 将会自动调用关 闭
函数 close 。
文本文件 (Text mode files)
类 ofstream, ifstream 和 fstream 是分别从 ostream, istream 和 iostream 中引申
而来的。这就是为什么 fstream 的对象可以使用其父类的成员来访问数据。
一般来说,我们将使用这些类与同控制台 (console) 交互同样的成员函数 (cin 和 cout)
来进行输入输出。如下面的例题所示,我们使用重载的插入操作符 << :
#include <fstream.h>
int main ()
{
ofstream examplefile ("example.txt");
if (examplefile.is_open())
file example.txt
This is a line.
This is another line.
{
examplefile << "This is a line.\n";
examplefile << "This is another line.\n";
examplefile.close();
}
return 0;
}
从文件中读入数据也可以用与 cin 的使用同样的方法:
上面的例子读入一个文本文件的内容, 然后将它打印到屏幕上。 注意我们使用了一个新的 成
员函数叫做 eof ,它是 ifstream 从类 ios 中继承过来的,当到达文件末尾时返回 true
。
状态标志符的验证 (Verification of state flags)
除了 eof() 以外,还有一些验证流的状态的成员函数(所有都返回 bool 型返回值):
// reading a text file
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
int main () {
char buffer[256];
ifstream examplefil("example.txt");
if (! examplefile.is_open())
{ cout<<"Error opening file";exit(1); }
while (! examplefile.eof() ) {
examplefile.getline
(buffer,100);
cout << buffer << endl;
}
return 0;
}
This is a line.
This is another line.
剩余10页未读,继续阅读
半斤土豆
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1