`
阿尔萨斯
  • 浏览: 4192143 次
社区版块
存档分类
最新评论

c++ 文件流

 
阅读更多

c++标准库中对文件流的有3个类使用:

fstream类,它是 从iostream类派生的,支持对磁盘文件的输入和输出。

ifstream类,它是 从istream类派生的,支持对磁盘文件的输入。

ofstream类,它是 从ostream类派生的,支持对磁盘文件的输出。

输入是指,从磁盘文件输入到内存中调用,输出是,从内存中输出到磁盘文件中。


三者用法大致相同,下面以fstream为例,来进行文件的输入输出。


#include <fstream>

//fstream ffile;//fstream是类,可以使用默认的构造函数,也可以直接选择读取文件
	//ffile.open("file.txt",ios::out);//两个参数,文件名,输入输出方式
	fstream ffile("file.txt",ios::in);//
	ffile.close();//使用后一定要关闭文件流,不然,无法完成输入输出操作

对于输入输出方式,如下:

ios::in 以输入方式打开文件

ios::out 以输出方式打开文件,为默认模式,如果已有文件,则将其中内容清空。

ios::app 以输出方式打开文件,写入数据添加在文件末尾

ios::binary 以二进制方式打开文件,若不指定,则为默认的ASCII方式打开文件,二进制格式时,即可以同时进行输入输出


ios::ate 文件指针指向文件末尾,即只能对文件的最后一个字符进行更改

ios::trunc 如果文件已存在,则删除所有数据,如果文件不存在,则新建一个文件,默认ios::out时,也默认此模式


ios::nocreate 打开文件,若文件不存在,则打开失败

ios::noreplace 若文件不存在,则新建一个文件,若文件存在,则操作失败,即不能对文件进行读写

对于ios::noreplace ios::nocreate在c++中改成了ios::_Nocreate ios::_Noreplace

当声明只能输入时,进行输出操作是无效的,同理,以输出方式打开是不能进行输入的。

ASCII文件的操作是极其简单的,就如下,类似使用cout的输出与cin的输入一样。但<<和>>只能对char *,char 和const char *进行操作,不能直接输出string。

fstream ffile("file.txt",ios::out|ios::in);//
	char get[5];
	//ffile<<"awfaw";
	for(int i=0;i<5;i++){
		ffile>>get[i];
	}
	ffile.close();//使用后一定要关闭文件流,不然,无法完成输入输出操作

一些细节,ios::ate使文件指针指向文件末尾,若想要输出加ios::out|ios::in。

有put,get,getline等成员函数进行字符的输入输出。

ASCII只能进行输出或只能进行输入,不能同时输入输出。

fstream ffile("file.txt",ios::in|ios::out);//
	char get[5];
	ffile.put('9');
	ffile.get(get[0]);
	char str[5][10];
	ffile.getline(str[0],10);//储存数组,和读取字数,其实这不是getline,而是一次读入指定数量数据
	
	//ffile.get(get[1]);
	ffile.getline(str[1],8);

	ffile.close();


对于二进制文件:

使用read和write进行读写操作,二进制文件可以同时进行输入输出。

二进制文件读写时,文件指针会随着输入输出而改变,则有以下几种常用函数来控制文件指针:

tellg() 返回输入指针当前位置

seekg(int 文件中位置)设置输入文件中的指针的位置

seekg(int 偏移量,参考位置) 按照偏移移动到指定位置,参考位置共有三个 ios::beg 文件开头 ios::cur 当前指针位置 ios::end 文件末尾

teelp() 输出指针位置

seekp(int) 设置输出指针位置

seekp(int ,参考位置) 按照偏移设置指针位置

fstream ffile("file.txt",ios::binary|ios::in|ios::out);//输入输出
	ffile.seekp(ios::beg);
	ffile.write("cc",2);
	char r[10];
	ffile.seekg(5);//位置是从0开始的
	ffile.read(r,2);
	ffile.close();


使用“\r\n"进行换行操作。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics