20240220
文章目录
- 文件操作
- 背景
- 文件分类
- 操作文件的三大类
- 文本文件
- 写文件
- 写文件步骤
- 文件打开方式
- 代码示例
- 读文件
- 读文件步骤
- 代码示例
- 写二进制文件
- 写二进制文件步骤
- 代码示例
- 读二进制文件
- 代码示例
文件操作
背景
-
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放
-
通过文件可以将数据持久化
-
C++对文件操作需要引入头文件
<fstream>
文件分类
-
文本文件:文件以文本的ASCII码存储在计算机中
-
二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不可阅读
操作文件的三大类
-
ofstream:写文件
-
ifstream:读操作
-
fstream:读写文件
文本文件
写文件
写文件步骤
-
包含头文件:
#include <fstream>
-
创建流对象:
ofstream ofs;
-
打开文件:
ofs.open("文件路径", 打开方式1|打开方式2);
-
写数据:
ofs<<"写入的数据";
-
关闭文件:
ofs.close();
文件打开方式
- 文件打开方式可以配合着"|“使用,例如二进制的写使用"ios::binary|ios::out”
代码示例
#include <iostream>
// 1 引入头文件
#include <fstream>
using namespace std;
void test(){
// 2 创建流对象
ofstream ofs;
// 3 打开文件
ofs.open("write.txt", ios::out);
// 4 写文件
ofs << "hello file" << endl;
// 5 关闭文件
ofs.close();
}
int main(){
test();
return 0;
}
读文件
读文件步骤
-
包含头文件:
#include <fstream>
-
创建流对象:
ifstream ifs;
-
打开文件,并判断文件是否打开成功:
-
ifs.open("文件路径", 打开方式1|打开方式2);
-
if (!ifs.is_open()){cout << "open file fail";}
-
-
读数据:四种方式读写
-
关闭文件:
ifs.close();
代码示例
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void test1(){
cout << "=======方式一读========"<< endl;
ifstream ifs;
ifs.open("write.txt");
if(!(ifs.is_open())){
cout << "打开文件失败" << endl;
return;
}
// 读文件1
char buf[1024]={0};
while(ifs>>buf){
cout << buf<<endl;
}
ifs.close();
}
void test2(){
cout << "=======方式二读========"<< endl;
ifstream ifs;
ifs.open("write.txt");
if(!(ifs.is_open())){
cout << "打开文件失败" << endl;
return;
}
// 读文件2
char buf[1024]={0};
while(ifs.getline(buf, sizeof(buf))){
cout << buf<<endl;
}
ifs.close();
}
void test3(){
cout << "=======方式三读========"<< endl;
ifstream ifs;
ifs.open("write.txt");
if(!(ifs.is_open())){
cout << "打开文件失败" << endl;
return;
}
// 读文件3
string buf;
while(getline(ifs, buf)){
cout << buf<<endl;
}
ifs.close();
}
void test4(){
cout << "=======方式四读========"<< endl;
ifstream ifs;
ifs.open("write.txt");
if(!(ifs.is_open())){
cout << "打开文件失败" << endl;
return;
}
// 读文件4
char c;
while((c=ifs.get()) != EOF){
cout << c;
}
ifs.close();
}
int main(){
test1();
test2();
test3();
test4();
}
写二进制文件
- 参数原型:
ofstream& write(const char* buf, int size);
,参数一为写入内容的地址,参数二为写入数据的大小
写二进制文件步骤
-
包含头文件:
#include <fstream>
-
创建流对象:
ofstream ofs("文件路径", 打开方式1|打开方式2);
,可以使用这种构造方法将创建和打开对象合并成一步进行 -
打开文件:
ofs.open("文件路径", 打开方式1|打开方式2);
-
写数据:
ofstream& write(const char* buf, int size);
,参数一为写入内容的地址,参数二为写入数据的大小 -
关闭文件:
ofs.close();
代码示例
#include <iostream>
#include <fstream>
using namespace std;
struct Person{
char name[10];
int age;
};
void test(){
ofstream ofs("binary.txt", ios::out|ios::binary);
Person p = {"zsx", 19};
ofs.write((const char *)&p, sizeof(Person));
ofs.close();
}
int main(){
test();
return 0;
}
读二进制文件
- 参数原型:
ifstream& read(char* buf, int len);
,字符指针buf指向内存中的一段存储空间,len是读写的字节数
代码示例
#include <iostream>
#include <fstream>
using namespace std;
struct Person{
char name[10];
int age;
};
void test(){
ifstream ifs("binary.txt", ios::in|ios::binary);
Person p;
ifs.read((char *)&p, sizeof(Person));
if (!ifs.is_open()){
cout << "打开文件出错" << endl;
return;
}
cout << p.name << endl;
cout << p.age << endl;
ifs.close();
}
int main(){
test();
return 0;
}