目录
???????一、文件操作
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放
通过文件可以将数据持久化
C++中对文件操作需要包含头文件< fstream >
? ? ? ? 1.包含头文件
????????????????#include<fstream>
? ? ? ? 2.创建流对象
????????????????ofstream? ofs;
? ? ? ? 3.打开文件
????????????????ofs.open("文件路径",打开方式);
? ? ? ? 4.写数据
????????????????ofs<<"写入数据";
? ? ? ? 5.关闭文件
????????????????ofs.close();
文件打开方式
打开方式 | 功能 |
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置,文件尾 |
ios::app | 以追加的方式写入 |
ios::trunc | 如果文件存在,先删除,再创建一个新的 |
ios::binary | 二进制方式写文件 |
注意:
文件打开方式可以配合使用,? 利用? |? 操作符(位或)
示例:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
??? // 1. 包含头文件<fstream>
??? // 2. 创建流对象?? ofstream ofs;
??? // 3. 打开文件 ofs.open("文件路径",打开方式)
??? // 4. 写数据?? ofs<<"写入数据"
??? // 5. 关闭文件 ofs.close()
?
??? ofstream ofs;
??? ofs.open("E:/test.txt", ios::out); // 没有指定具体路径存放到当前项目的文件夹下
??? ofs << "helo " << endl;
??? ofs << "文件操作" << endl;
??? ofs.close();
??? return 0;
}
结果示例:
总结:
? ? ? ? 1.包含头文件
????????????????#include<fstream>
????????2.创建流对象
????????????????ifstream? ifs;
? ? ? ? 3.打开文件
????????????????ifs.open("文件路径",打开方式);
? ? ? ? 4.读数据
????????????????四种方式读取
? ? ? ? 5.关闭文件
????????????????ifs.close();
示例:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
??? // 1. 包含头文件<fstream>
??? // 2. 创建流对象?? ifstream ifs;
??? // 3. 打开文件 ofs.open("文件路径",打开方式)
??? // 4. 读数据?? 四种方式读取
??? // 5. 关闭文件 ifs.close()
?
??? ifstream ifs;
??? ifs.open("E:/test.txt", ios::in);
??? if( !ifs.is_open()){
???? cout<<"文件打开失败"<<endl;
???? //return;
}
// 第一种:字符数组
char buf[1024]={0};
while(ifs>>buf){
cout<<buf<<endl;
}
// 第二种
char buf1[1024]={0};
// 获取一行
while(ifs.getline(buf1,sizeof(buf1))){
cout<<buf1<<endl;
}
// 第三种:字符串中
string buf2;
while(getline(ifs,buf2)){
cout<<buf2<<endl;
}
// 第四种:一个一个读取没有一行一行读取快
char c;// 判断是否读取到了文件的尾部
while((c = ifs.get())!=EOF){ // end of file
cout<<c;
}
??? ifs.close();
??? return 0;
}
运行结果:
第一种:
第二种:
第三种:
第四种:
总结:
?
示例:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class person{
public:
char Name[64];
int Age;
};
int main()
{
??? // 打开的方式要指定为 iOS::binary
??? // 函数原型 ostream &write(const char *buffer,int len);
??? // 1. 包含头文件
// 2. 创建流对象
ofstream ofs;
// 3. 打开文件
ofs.open("E:/text.txt",ios::out|ios::binary);
// 4. 写文件
person p ={"张三",18};
ofs.write((const char *)&p,sizeof(p));
// 5. 关闭文件
ofs.close();
??? return 0;
}
运行结果示例:
示例:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class person{
public:
char Name[64];
int Age;
};
int main()
{
??? // 打开的方式要指定为 iOS::binary
??? // 函数原型 istream &read(const char *buffer,int len);
??? // 1. 包含头文件
// 2. 创建流对象
ifstream ifs;
// 3. 打开文件? 判断文件是否读取成功
ifs.open("E:/text.txt",ios::in|ios::binary);
if(!ifs.is_open()){
return 0;
}
// 4. 读文件
person p ;
ifs.read((char *)&p,sizeof(p));
?
cout<<"姓名: "<<p.Name<<endl<<"年龄: "<<p.Age<<endl;
// 5. 关闭文件
ifs.close();
??? return 0;
}
运行结果: