根据《C++primer》这本书整理了文件操作的一些知识,文件操作属于IO操作,C++中的IO操作以及三大基类关系,包括流的概念等等,这里就不涉及了,只记录文件操作。理解了文件中流的操作和一般的cout<<和cin>>操作,再来理解流的概念,应该是豁然开朗的局面,这个文章最后再讲。
关于文件操作,涉及到一个头文件和三个基类,头文件fstream中有三个基类:fstream,ifstream和ofstream的声明和定义,也就是说,你要设计文件操作,要include头文件fstream,至于三个文件操作的基类这就不详细讲了,只强调一句,ifstream和ofstream继承自fstream。要记住的是ifstream类定义的对象只能对文件进行读的操作,ofstream类定义的对象只能进行写的操作,顾名思义,fstream类定义的对象能同时进行读写操作。
1、读文件操作
需要定义ifstream对象,假设为fun,然后要打开相应的文件,将文件中的内容读入内存进行操作,所以fun对象就相当于一个管道,连接这文件和内存。内码如下
ifstream fun("file.txt"); //ifstream fun; //fun.open("file.txt");
ifstream fun("file.txt"); //ifstream fun; //fun.open("file.txt"); string s; fun>>s;//通过fun流流到s字符串,流入内存 cout<<s;//通过cout流(是标准库给我们的对象,直接用,是ostream类的对象)流出到显示器显示,从内存流出 //getline(fun,s);(读文件中一行内容,不会到第一个空格就停止) fun.close();//每次读完文件要将流关闭
以上就是读文件的操作,其实对于将文件中的内容读入string对象和直接cin>>s是一样的,即遇到空格回车就读完,所以s只能读到第一个空格结束。如果想要一行一行的读文件中的内容,可以使用getline()函数,上面代码中有写。
2、写文件的操作写文件和读文件原理一样,只是有些细节不同,如文件打开模式的不同等等,先说文件打开模式,其实读文件也应该有文件打开模式的。对于读文件的操作,文件打开模式影响不大ifstream fun("file.txt",ifstream::in)//这是默认的读文件模式,就是ifstream::in写不写都一样ofstream fun("file.txt",ofstream::out)//这是默认的写文件打开模式,就是ofstream::out写不写都一样,这种模式,打开文件后,会将文件清空,意思就是你用这种模式打开后,文件就空了,没有为什么,就是这么规定的。ofstream fun("file.txt",ofstream::app);//这种打开文件的模式只能用于写文件,即每次写文件将文件流定位于文件尾,记住是每次,即使你将文件流重新定位了也没用。
3、读写操作同时进行fstream fun("file.txt");//这里是默认以in和out模式打开文件,文件不会被清空,但app模式不适用这里,app只能用于ofstream,如果想定位于文件尾,可使用ate模式其它操作参照上面。
4、文件操作的一些细节问题文件的绑定,可以是构造函数,如上面的代码,也可以是fun.open()函数的调用,但是,文件名是不能为string类型,就是不能将文件路径名存到string类型的对象中去,这个源于一些历史原因,自己上网查吧,不详细讲了,还有文件流的定位问题,seekg和seekp函数的应用,以及文件流当前位置的获得,tellg和tellp函数的应用,这个是具体程序的具体应用了。