头文件
#include<fstream>
文件类型分两种:
文本文件:以文本ASCII码存储
二进制文件:以二进制存储
操作文件三大类:
ofstream:写操作
ifstream:读操作
fstream:读写操作
1.文本文件读写
1.1写文本文件
写文件基本步骤
#include<fstream> //包含头文件
ofstream ofs; // 创建流对象
ofs.open("路径",打开方式) //打开文件
ofs << "写入的数据"; // 写入数据
ofs.close(); // 关闭文件
打开方式:
ios::in 为读文件而打开
ios::out 为写文件而打开
ios::ate 初始位置:文件尾
ios:app 追加方式写文件
ios::trunc 如果文件存在先删除,再创建
ios::binary 二进制方式
打开方式可以配合使用,例如:ios::binary | ios::out
1.2 读文本文件
读文件基本步骤
#include<fstream> //包含头文件
ifstream ifs; // 创建流对象
ifs.open("路径",打开方式) //打开文件并检查是否顺利打开
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
return;
}
有四种方式读取; // 写入数据
ifs.close(); // 关闭文件
读取数据的方式:
- 以字符为单位读取
char buf[1024] = {0};
while(ifs>>buf)
{
cout << buf << endl; //每一次循环中,buf为每一个char,以空格和换行符划分
}
- 以行为单位读取
char buf[1024] = {0};
while (ifs.getline(buf,sizeof(buf)))
{
cout << buf << endl;
}
- 读取字符串
string buf;
while ( getline(ifs , buf))
{
cout << buf << endl;
}
- 一个个字符去读(不推荐这么干)
char c;
while ((c = ifs.get()) != EOF)
{
cout << c;
}
2 二进制文件读写
要用ios::binary
2.1写二进制文件
二进制方式写文件主要利用流对象调用成员函数write
ostream& write(char *buffer, int len);
class Person
{
public:
char m_name[64]; //写二进制数据最好不要用C++的string,要用C的char数组
int m_age;
};
void test01()
{
ofstream ofs;
ofs.open("test.txt", ios::out | ios::binary);
Person p = { "张三", 18 };
ofs.write((const char *)&p, sizeof(Person));
ofs.close();
}
int main()
{
test01();
return 0;
}
2.2读二进制文件
二进制方式读文件主要利用流对象调用成员函数read
istream& read(char *buffer, int len);
class Person
{
public:
char m_name[64]; //写二进制数据最好不要用C++的string,要用C的char数组
int m_age;
};
void test01()
{
ifstream ifs;
ifs.open("test.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "打开失败" << endl;
return;
}
Person p;
ifs.read((char*)&p, sizeof(Person));
cout << p.m_age << p.m_name << endl;
ifs.close();
}
int main()
{
test01();
return 0;
}