导入头问价#include <fstream>
-
写操作:ofstream
-
读操作:ifstream
-
读写操作:fstream
1、文本文件
1)写文件步骤:
-
包含头文件
#include <fstream>
-
创建流对象
ofstream 流名称;
-
打开文件
流名称.open("文件路径", 打开方式);
-
写数据
流名称 << "要写入的内容" ;
-
关闭文件
流名称.close();
2)打开方式:
打开方式 | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::app | 以追加方式写入文件 |
ios::ate | 初始位置:文件尾 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
注意:多个可以连用:以二进制方式写入文件(ios::binary | ios::out)
3)读文件步骤:
-
包含头文件
#include <fstream>
-
创建流对象
ifstream 流名称;
-
打开文件并判断文件是否打开成功
流名称.open("文件路径", 打开方式); bool result = 流名称.is_open(); // 判断文件是否打开成功
-
读数据
第一种方式:
char buf[1024] = {0}; while(流名称 >> buf){ // 为false表示读取结束 cout << buf << endl; }
第二种方式:
char buf[1024] = {0}; while(流名称.getline(buf,sizeof(buf))) //getline()表示获取一行数据---参数1表示读取数据放的位置,参数2表示一次读区的大小 { cout << buf <<endl; }
第三种方式----利用全局的getline函数
string buf; while(getline(流对象,buf)){ // 参数1表示流对象,参数2表示数据读取到的位置 cout << buf << endl; }
第四种方式:
char c; while((流对象.get()) != EOF){ // get方法一次读取一个字符,放到字符c中,并判断若果没有读到文件尾部(EOF)就继续读取 cout << c <<endl; }
7.2、二进制文件
二进制方式写入文件主要利用的是流对象调用成员函数write
1)写文件:
#include <iostream>
#include <fstream> // 导入流类的包
using namespace std;
// 创建Person类
class Persin{
public:
char name[20]; // 以二进制格式写入文件时,最好使用处于的字符数组,使用c++的string可能出现问题
int age;
};
// 创建以二进制格式写入文件的函数
void text(){
// 创建流对象
ofstream ofs;
// 打开文件
ofs.open("文件路径", ios::binary | ios::out);
// 写入文件
Persin p = {"zhang", 23};
ofs.write((const char*)&p, sizeof(Persin)); //write 参数1表示const char*类型的地址,参数2为大小
// 关闭文件
ofs.close();
}
int main(){
text();
return 0;
}
2)读文件:
#include <iostream>
#include <fstream>
using namespace std;
// 创建Person类
class Persin{
public:
char name[20]; // 以二进制格式写入文件时,最好使用处于的字符数组,使用c++的string可能出现问题
int age;
};
// 定义读取的函数
void text(){
// 创建读取对象
ifstream ifo;
// 打开文件
ifo.open("文件路径",ios::binary | ios::in);
// 判断文件是否正常打开
if(!ifo.is_open()){
cout << "文件打开失败!" << endl;
}
// 读取文件(读取到Persin类中)
Persin p;
ifo.read((char*)&p,sizeof(p)); // read 参数1表示char*类型的地址,参数2表示大小
// 输出读取到的文件信息
cout << "姓名:" << p.name << " , 年龄:" << p.age << endl;
// 关闭文件
ifo.close();
}
int main(){
text();
return 0;
}