C++文件操作
文件操作
文件操作是学习编程语言的基础内容。
通过文件操作可以将数据持久化到磁盘,C++对文件操作可以包含头文件<fstream>。
文件的分类
- 文本文件:可以理解为字符串内容(明文),通过文本编辑器可以展示其内容。(如普通的txt文件)
- 二进制文件:可以理解为非字符串内容,文本编辑器打开后基本为乱码。(如下载的安装文件exe等)
操作文件的三大类
- ofstream : 写操作
- ifstream : 读操作
- fstream : 读写操作
文件的打开方式
打开方式 | 解释 |
---|---|
ios::in | 读文件 |
ios::out | 写文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加(初始位置文件尾并且是写模式) |
ios::trunc | 文件存在先删除,再创建 |
ios::binary | 二进制方式 |
如果需要多种模式配合使用,可以使用 | 操作符
如:使用二进制写文件 ios::binary | ios::out
写文件
cpp
void writeFile() {
//创建流对象
ofstream ofs;
//本身类就是输出流,还需要指定写模式
ofs.open("test.txt", ios::out);
ofs << "写文件好简单!" << endl;
ofs << "END" << endl;
//使用完需要关闭
ofs.close();
}
读文件
cpp
void readFile() {
//创建流对象
ifstream ifs;
//打开文件
ifs.open("test.txt", ios::in);
//文件是否打开成功
if(ifs.is_open()){
//读文件 四种方式(四种方法只能选择其中一种,然后注释掉其它三种)
//第一种
char buffer[1024] = {0};
while(ifs >> buffer){
cout << buffer << endl;
}
//第二种
char buffer[1024] = {0};
while(ifs.getLine(buffer, sizeof(buffer) {
cout << buffer << endl;
}
//第三种
string str;
while(getLine(ifs, str)){
cout << str << endl;
}
//第四种(不推荐)
char c;
//EOF(end of file)文件尾,其实就是空
while((c = ifs.get()) != EOF) {
cout << c;
}
关闭流
ifs.close();
}
}
二进制文件
二进制读写文件,不仅仅可以操作内置的数据类型,甚至可以操作自定义的数据类型。
写文件
cpp
//自定义数据类型Person
class Person {
public:
char name[64];
int age;
}
void writeFile() {
//创建流对象
ofstream ofs;
//二进制的方式打开文件
ofs.open("person.txt", ios::out | ios::binary);
//可以直接创建流对象的同时打开文件
//ofstream ofs("person.txt", ios::out | ios::binary);
//写文件
Person person = { "张三" , 22};
ofs.write((const char*)&person, sizeof(person));
//关闭文件
ofs.close();
}
写对象二进制的方式,通过文本文件打开,会发现乱码现象。
读文件
cpp
void readFile() {
//创建流对象
ifstream ifs;
//打开文件
ifs.open("test.txt", ios::in | ios::binary);
//文件是否打开成功
if(ifs.is_open()){
//读文件
Person person;
ifs.read((char *) &person, sizeof(person));
//关闭文件
ifs.close();
}
}
这一章只是对文件操作的一节实践课,C++文件操作fstream仅是对libc中posix接口的二次封装,提供了更友好的操作方式。