一、文件读写

  1. 文件输入流 ifstream
  2. 文件输出流 ofstream
  3. 文件输入输出流 fstream
  4. 文件的打开方式
  5. 文件流的状态
  6. 文件流的定位:文件指针(输入指针、输出指针)

输入输出流

二、文本文件

#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();
}