C++通过以下几个类支持文件的输入输出
(1) ofstream:写操作,输出文件类;(2) ifstream: 读操作,输入文件类;
(3) fstream: 可同时读写的文件类。
1. open函数:打开文件
函数原型:void open(const char*filename,int mode,int access);参数说明:filename: 要打开的文件名
mode: 要打开文件的方式
access: 打开文件的属性
打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:
ios::app: 以追加的方式打开文件
ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
ios::in: 文件以输入方式打开
ios::out: 文件以输出方式打开
ios::nocreate: 不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc: 如果文件存在,把文件长度设为0
可以用“或”把以上属性连接起来,如ios::out|ios::binary
打开文件的属性取值是:0:普通文件,打开访问
1:只读文件
2:隐含文件
4:系统文件
例如:以二进制输入方式打开文件c:\config.sys
fstreamfile1;
file1.open("c:\\config.sys",ios::binary|ios::in,0);
ofstream file;
file.open ("example.bin", ios::out |ios::app | ios::binary);
2. close函数
函数原型:void close()3. 二进制文件(Binary files)
在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类 fstream 的对象同时拥有这两个函数。它们的原型是:
write ( char *buffer, streamsize size );
read ( char * buffer, streamsize size );
这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。
[cpp] view plaincopyprint?
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
const int SZ=100;
char buf[SZ];
{
ifstream in;
in.open("example.cpp",ios::in);
ofstream out;
out.open("example.out");
int j=1;
while(in.get(buf,SZ))
{
in.get();
cout<<buf<<endl;
out<<j++<<":"<<buf<<endl;
}
}
ifstream in("example.out");
while(in.getline(buf,SZ))
{
char *cp=buf;
while(*cp!=':')
{
++cp;
}
cp+=2;
cout<<cp<<endl;
}
system("pause");
return 0;
}