cpp 文件打开模式

发布时间 2023-03-31 17:46:32作者: xzsxzxs
模式 文件流 说明
ios::in fstream ifstream 读取、不存在报错
ios::out ofstream fstream 输出、清空、创建
ios::app ofstream fstream 追加、创建
ios::ate ifstream 读取、移动到文件末尾、不存在报错
ios::trunc ofstream 打开文件时会清空内部存储的所有数据,单独使用时与 ios::out 相同。
ios::in ios::out fstream 打开已存在的文件,既可读取其内容,也可向其写入数据。文件刚打开时,原有内容保持不变。如果文件不存在,则打开出错。
ios::in ios::out ofstream 打开已存在的文件,可以向其写入数据。文件刚打开时,原有内容保持不变。如果文件不存在,则打开出错。
ios::in ios::out ios::trunc fstream 打开文件,既可读取其内容,也可向其写入数据。如果文件本来就存在,则打开时清除原来的内容;如果文件不存在,则新建该文件。
ios::binary ifstream
ofstream
fstream 以二进制方式打开文件。若不指定此模式,则以文本模式打开。

app模式下,移动指针无效,写总是在文件末尾追加
ifstream 默认有 ios::in, ofstream 默认有 ios::out, fstream 默认有 ios::in | ios out
上面这些模式可以随便组合、但是有些是无效的
假如 ofstream 用 ios::in,则不清空。 | ios::ate 则移动文件指针到末尾
ios::in 默认检查是否存在,不清空 ios::out默认清空

考虑的步骤
1、首先考虑ifstream ofstream
2、是否清空 ios::in 可以不清空、是否追加 、是否移动文件到末尾ios::ate

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "spd_logger.h"
using namespace std;

int main() {
    ofstream outfile("C:\\Users\\Administrator\\Desktop\\test\\a.txt", ios::out | ios::in); // 创建文件输出流对象
    if (outfile.is_open()) { // 判断文件是否成功打开
        outfile << "a" << endl; // 将数据写入文件
        outfile.close(); // 关闭文件输出流
        cout << "数据已成功写入文件example.txt中" << endl;
    } else {
        cerr << "无法打开文件" << endl;
        return 1;
    }
    return 0;
}