一、文件读写
- 文件输入流
ifstream
- 文件输出流
ofstream
- 文件输入输出流
fstream
- 文件的打开方式
- 文件流的状态
- 文件流的定位:文件指针(输入指针、输出指针)
二、文本文件
#include <iostream>
#include <fstream>
using namespace std;
void ReadWriteFile(){
ifstream ifs("D:\\Users\\cui_z\\Desktop\\source.txt", ios::in);
ofstream ofs("D:\\Users\\cui_z\\Desktop\\target.txt", ios::out | ios::app);
if (!ifs)
{
cout << "输入文件打开失败" << endl;
return;
}
if (!ofs)
{
cout << "输出文件打开失败" << endl;
return;
}
char ch;
while (ifs.get(ch))
{
cout << ch;
ofs << ch;
}
ifs.close();
ofs.close();
}
三、二进制文件
- 文本文件和二进制文件在计算机中都是以二进制的方式存储的
- 程序中的对象都是二进制存储的
- Windows 中的文本文件换行符用
\r\n
表示,二进制是以\n
存储,所以存储和显示时会做一下转换 - Linux 中二进制和文本文件换行都是以
\n
存储和表示
class Person
{
private:
int m_age;
int m_id;
public:
Person():m_age(0), m_id(0){
}
Person(int age, int id){
m_age = age;
m_id = id;
}
~Person() = default;
void show(){
cout << "Age: " << m_age << " ID: " << m_id << endl;
}
};
void BinaryReadWrite(){
// 存储二进制
ofstream ofs("D:\\Users\\cui_z\\Desktop\\target.txt", ios::out | ios::binary);
if (!ofs)
{
cout << "存储文件打开失败" << endl;
return;
}
Person p1(10, 20), p2(30, 40);
ofs.write((const char*)&p1, sizeof(Person));
ofs.write((const char*)&p2, sizeof(Person));
ofs.close();
// 读取二进制
ifstream ifs("D:\\Users\\cui_z\\Desktop\\target.txt", ios::in | ios::binary);
if (!ifs)
{
cout << "读取文件打开失败" << endl;
return;
}
Person p3, p4;
ifs.read((char*)&p3, sizeof(Person));
ifs.read((char*)&p4, sizeof(Person));
p3.show();
p4.show();
ifs.close();
}