文件操作
程序运行时的产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化,c++中对文件操作需要包括头文件
文件类型分为两种:
1.文本文件 文件以文本的ASCII码形式存储在计算机
2. 二进制文件 文件以文本的二进制形式储存在计算机中,用户一般不能直接读懂他们
操作文件的三大类:
. ofstream : 写文件
. ifstream : 读文件
. fstream : 读写文件
文本文件
- 写文件
1.包含头文件 #include
2. 创建流对象 ofstream ofs;
3.打开文件 ofs.open(“文件路径”,“打开方式”);
4.写数据 ofs<<“写数据”;
5.关闭文件。
文件的打开方式: | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加的方式写文件 |
ios::trunc | 如果文件纯在先删除,再创建 |
ios::binary | 以二进制方式打开 |
注意: 文件打开方式可以配合使用,利用| 操作符
#include<fstream>
void test01(){
ofstream ofs; //创建流对象
ofs.open("leb.txt",ios::out);
ofs<<"姓名: 张三"<<endl;
ofs<<"性别: 男"<<endl;
//关闭文件
ofs.close();
}
读文件
1.包含头文件 #include
2. 创建流对象 ifstream ifs;
3.打开文件 ofs.open(“文件路径”,“打开方式”); 并判断是否打开成功
4.读数据 四种方式读取.
5.关闭文件。 ifs.close();
#include<fstream>
void test01(){
ifstream ifs;
ifs.open("leb.txt",ios::in);
if(!ifs.is_open()){
cout<<"文件打开失败"<<endl;
return ;
}
//读数据
//第一种:
char buf[1024]={0};
while(ifs>>buf){ //遇见空格就结束,
cout<<buf<<endl;
}
//第二种
char buff[1024]={0};
while(ifs.getline(buf,1024)){ //读一行
cout<<buff<<endl;
}
//第三种
string bu;
while(getline(ifs,bu)){
cout<<bu<<endl;
}
//第四种 ,一个一个字符读,不推荐
char c;
while((c=ifs.get())!=EOF) //EOF 文件尾
{
cout<<c;
}
ifs.close();
}
二进制文件
以二进制方式对文件进行读写操作;
打开方式要指定为ios::binary;
写文件
二进制方式写文件要利用流对象调用成员函数write;
ostream & write(const char * buffer,int len);
字符串指针buffer指向内存种的一段存储空间,len是读写的字节数.
class person{
char m_name[64]; //姓名
int m_age;
};
void test(){
ofstream ofs;
ofs.open("leb.txt",ios::out| ios::binary);
person p={"张",18};
ofs.write((const char*)&p,sizeof(person));
ofs.close();
}
读文件
二进制方式读文件主要利用流对象调用成员函数read;
函数原型 istream &read(char * buffer,int len);
buffer 指向内存种的一段存储空空间,len是读写的字节数.
#include<fstream>
class person{
char m_name[64]; //姓名
int m_age;
};
void test01(){
ifstream ifs; //创建流对象
ifs.open("leb.txt",ios::in | ios::binary);
Person p;
ifs.read((char*)&p,sizeof(person)):
//关闭文件
ifs.close();
}