目录
总叙
区别于普通的未使用文件操作的C++程序,使用文件操作可以使你的运行数据永久保存。不会随着程序的结束而运行数据消失。
c++语言将文件以字节流的形式进行识别。
文件有两种类型,文本文件和ASCII码文件。
存取文件也有两种,一种是顺序存储文件,另一种是随机存取文件。
再来浅谈一下如何进行数据的传输:使用ifstream和ofstream,fstream类。
文件的打开和关闭
在编写程序时,主要遵循的流程如下
打开文件->读写文件->关闭文件
遵循着这样的整体流程,就可以将所有的文件操作抽象出来,方便理解和操作。
文件的打开
1、建立流对象调用open函数从而连接外部文件
//流类 对象名;
//对象名.open(文件名,方式);
2、调用定义的流类的带参数的构造函数,在建立流对象的同时连接外部文件
//流类 对象名(文件名,方式);
其中的流类指的是文件流,即ifstream,ofstream,fstream类
(注意:在使用流类时,一定不要忘记加上头文件<fstream>)
ifstream | 以只读方式打开文件 |
ofstream | 以写的方式打开文件 |
fstream | 以读、写的方式打开文件 |
实例
举个简单例子:
打开一个文件,准备读:
ifstream s;
s.open("文件名",ios::in);
//此处的ios::in会在后面进行解释说明,这里只需知道是关于表示一种打开文件的方式
打开一个文件,准备写:
ofstream a;
a.open("文件名",ios::out);//ios::out指的是以写的方式打开文件
文件的打开方式
标识常量 | 值 | 意义 |
ios::in | 0x0001 | 读方式打开文件 |
ios::out | 0x0002 | 写方式打开文件 |
ios::ate | 0x0004 | 打开文件时,文件指针指向文件末尾 |
ios::app | 0x0008 | 追加方式,将向文件中输出的内容追加到文件尾部 |
ios::trunc | 0x0010 | 删除现有文件内容,ios::out的默认操作 |
ios::nocreate | 0x0020 | 若文件不存在,则打开文件失败 |
ios::noreplace | 0x0040 | 若文件存在,则打开文件失败 |
ios::binary | 0x0080 | 以二进制打开文件,默认文本方式 |
有关注意事项:
1、假如只存在ios::out,那么每次将内容写入后,再次打开时,上次输入的内容会被清空。
2、假如既存在ios::out又存在ios::in那么每次内容写完后,再次运行时,上次的结果仍然会被保留。
3、假如写入了ios::app,那么他的优先级会高于上述的两个优先级的和,一切会优先考虑ios::app
4、假如没有生成笔记本,那么会自动生成一个笔记本记录数据。
例如:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
fstream a;
a.open("123.txt",ios::out);
if (a.is_open())
cout<<"文件已被打开,准备写入" ;
a<<"我要上研究生,我一定要上研究生!!!"<<endl;
a.close();
return 0;
}
文件的关闭
缓冲区数据传入文件中,添加文件结束符,切断流对象和外部文件之间的连接通路。
此处要使用的函数是fstream中的close函数
ifstream a;
a.open("aas.txt",ios::in);//读文件
a.close();//关闭aas.text
a.open("aas2.txt",ios::in);//重新启用流对象
关闭一个对象后,假如流对象的生存周期还未结束,那么流对象仍然存在,可以与之连接,可以重新使用该流对象打开其他文件。
当流对象的生存周期结束后,系统会自动关闭文件。
有关注意事项
c++读出来的的字节是按照字符指针来进行操作的。
不要忘记加上头文件<fstream>