现在的位置: 首页 > 综合 > 正文

C++的文件操作

2014年01月17日 ⁄ 综合 ⁄ 共 1597字 ⁄ 字号 评论关闭

前段时间面试有个涉及到文件操作的笔试题,才发现好久不用,自己已经忘掉怎么用了,今天特地复习了一下,这里做个记录

输入输出类iostream大家都用过,其实它是由istream和ostream共同派生出来的。文件操作有三个类,继承自istream的ifstream类、继承自ostream的ofstream类以及继承自iostream的fstream类。

网上说C++的iostream库主要包含以下几个头文件:fstream    iomainip、ios、iosfwd、iostream、istream、ostream、ssstream、streambuf、strstream,不过我没有都看,只是挑了基础的几个看了看。

PS:C++和C的输入输出操作的不同在于,C的printf和scanf都是函数,而C++中的cin和cout都是全局对象。

下面来看看文件操作类的相关内容。

首先ofstream,它的默认构造函数是ofstream::ofstream(const char* filename, int mode=ios::out, int openprot=filebuf::openprot),对应着文件名,打开方式已经文件属性

mode属性表

ios::app; 以追加的方式打开文件
ios::ate 文件打开后定位到文件尾,ios::app就包含此属性
ios::binary 以二进制方式打开文件,缺省的是文本方式
ios::in 文件以输入方式打开
ios::out 文件以输出方式打开
ios::trunc 如果文件存在,把文件长度设置为0,就是说每次打开时都会情况文件

openprot属性表
0:普通文件,打开访问
1:只读文件
2:隐含文件
4:系统文件

以上这些属性都是可以叠加的,例如说ios::in | ios::app

废话少说,直接上例子才是王道

int main()
{
	char* filename="C:\\1.txt";
	ofstream f(filename, ios::app);
	f<<"这是我的第一个测试";
	f.close();
	return 0;
}

也可以不在流构造的时候制定文件,可以用成员函数open进行指定

int main()
{
	ofstream myfile;
	myfile.open("C:\\1.txt", ios::app);
	myfile<<"这是我的第一个测试";
	myfile.close();
	return 0;
}

通过上面的例子已经学会了如何用ofstream来把字符串写入到文件中去,下面来看一看怎么把文件内容读取出来

int main()
{
	ifstream myfile;
	myfile.open("C:\\1.txt",ios::app);
	char c;
	string s;
	while(myfile.get(c))
	{
		s+=c;
		cout<<c;//或者cout.put(c);
	}
	cout<<endl;
	cout<<s<<endl;
	system("pause");
	return 0;
}

上面介绍了ifstream和ofstream,下面来说说fstream,fstream可以同时对文件进行读写,这需要显式指定mode来实现

int main()
{
	fstream myfile;
	char* filename="C:\\1.txt";
	myfile.open(filename,ios::out | ios::trunc);
	myfile<<"Hello world!";
	myfile.close();

	myfile.open(filename, ios::in | ios::app);
	char c;
	string s;
	while(myfile.get(c))
	{
		s+=c;
		cout.put(c);//或者cout<<c;
	}
	cout<<endl<<s;

	return 0;
}

以上就是我今晚总结了,内容很浅显,略作了解吧,有时间我会把那个笔试题贴上来

PS:如有错误,烦请指正,共同进步

抱歉!评论已关闭.