c++的文件操作输入输出流fstream

#include <fstream>

文件输入输出流 file stream。注意每次对文件的操作完成后,一定一定要关闭文件!!!!!

fstream的第二个参数

std::ios:: 是C++中用于设置文件流(std::fstream)行为的一组标志。这些标志可以通过按位或运算符 | 来组合使用。以下是一些常见的 std::ios:: 标志及其含义:

  1. std::ios::in

    • 含义:打开文件以供读取。
    • 作用:允许从文件中读取数据。
  2. std::ios::out

    • 含义:打开文件以供写入。
    • 作用:允许将数据写入文件。如果文件已存在,写入会覆盖现有内容。如果文件不存在,则会创建新文件。
  3. std::ios::binary

    • 含义:以二进制模式打开文件。
    • 作用:在此模式下,文件将以二进制方式进行读取和写入,不会执行文本文件的文本处理。适用于处理二进制数据。
  4. std::ios::app

    • 含义:以附加模式打开文件。
    • 作用:在附加模式下,文件内容将被保留,并且写入的数据将追加到文件的末尾,而不是覆盖现有内容。
  5. std::ios::trunc

    • 含义:截断文件。
    • 作用:如果文件已经存在且以写入模式打开,将截断(清空)文件的内容。如果文件不存在,则忽略此标志。
  6. std::ios::ate

    • 含义:打开文件并将文件指针移到文件的末尾。
    • 作用:文件打开后,文件指针会立即移到文件的末尾,允许直接追加数据。
  7. std::ios::nocreate

    • 含义:不创建新文件。
    • 作用:如果文件不存在,将不会创建新文件。如果尝试打开一个不存在的文件,并且未设置此标志,将创建一个新文件。
  8. std::ios::noreplace

    • 含义:不替换已存在的文件。
    • 作用:如果文件已经存在,将不会覆盖或替换它。如果尝试打开一个已存在的文件,并且未设置此标志,将覆盖现有文件内容。
  • 这些标志可以通过按位或运算符 | 组合,以满足特定的文件操作需求。例如,要以二进制、附加和以输出方式打开文件,可以将这些标志组合起来:

    std::fstream file("example.bin", std::ios::binary | std::ios::out | std::ios::app);
    
    • 此代码将以二进制、附加和输出模式打开名为 “example.bin” 的文件,允许在文件末尾追加二进制数据。
      是的,std::ifstreamstd::ofstream 分别是C++标准库中用于文件输入和输出的类。它们具有以下默认行为:

ifstream && ofstream

  1. std::ifstream 默认用于读取(输入)文件。这意味着不需要显式指定 std::ios::in 标志。仅读取文件推荐使用!

    例如:

    std::ifstream inputFile("example.txt");
    // 等效于:std::ifstream inputFile("example.txt", std::ios::in);
    // std::fstream inputFile("example.txt", std::ios::in);
    
  2. std::ofstream 默认用于写入(输出)文件。这意味着不需要显式指定 std::ios::out 标志。仅写入文件推荐使用!

    例如:

    std::ofstream outputFile("output.txt");
    // 等效于:std::ofstream outputFile("output.txt", std::ios::out);
    // std::fstream outputFile("output.txt", std::ios::out);
    

    对每次写出文件有特殊需求的示例

    // 删去同名字文件
    std::fstream outputFile("output.txt", std::ios::out | std::ios::trunc);
    // 在文件末尾追加数据
    std::fstream outputFile("output.txt", std::ios::out | std::ios::app);
    
  • 这种默认行为使得在打开文件时更加方便,特别是在只需要执行读取或写入操作时。如果需要更复杂的文件操作,可以使用 std::ios:: 标志来配置文件流的行为,如在前面的回答中所描述的。
    要打开一个文件以进行可读可写的操作,您可以使用 std::fstream 类,该类允许您同时进行读取和写入。在打开文件时,您需要指定相应的标志来表示读取和写入操作。

读写示例

#include <iostream>
#include <fstream>

int main() {
    std::fstream file("example.txt", std::ios::in | std::ios::out);

    if (!file.is_open()) {
        std::cerr << "Failed to open the file!" << std::endl;
        return 1;
    }

    // 读取文件内容
    std::string line;
    while (std::getline(file, line)) {
        std::cout << "Read: " << line << std::endl;
    }

    // 在文件末尾添加新内容
    file << "This is a new line added to the file." << std::endl;

    // 移动文件指针到文件开头,并写入新内容
    file.seekp(0, std::ios::beg);
    file << "This is new content at the beginning of the file." << std::endl;

    file.close();
    
    return 0;
}

在这个示例中,我们首先用 std::ios::in | std::ios::out 标志打开了文件,允许读取和写入操作。然后,我们使用 getline 从文件中读取内容,并使用 << 操作符将新内容写入文件。通过使用 seekp 函数,我们还可以移动文件指针到文件的开头,并在开头插入新的内容。
注意,文件的打开模式取决于个人需求。

C语言

"r" - 读取模式(Read):打开文件进行读取。如果文件不存在,操作将失败。

"w" - 写入模式(Write):创建一个新文件进行写入。如果文件已经存在,则截断文件(即清空文件内容)。

"a" - 追加模式(Append):打开文件进行写入,但是不清空文件内容。如果文件不存在,则创建文件。

"rb" - 读取二进制模式(Read Binary):以二进制模式打开文件进行读取。

"wb" - 写入二进制模式(Write Binary):以二进制模式创建一个新文件进行写入。

"ab" - 追加二进制模式(Append Binary):以二进制模式打开文件进行写入,不清空文件内容。

"r+" - 读取/写入模式(Read/Write):打开文件进行读取和写入。文件必须已经存在。

"w+" - 读取/写入模式(Read/Write):创建一个新文件进行读取和写入。如果文件已经存在,则截断文件。

"a+" - 读取/追加模式(Read/Append):打开文件进行读取和追加写入。如果文件不存在,则创建文件。

"r+b""rb+" - 读取/写入二进制模式(Read/Write Binary)。

"w+b""wb+" - 读取/写入二进制模式(Read/Write Binary)。

"a+b""ab+" - 读取/追加二进制模式(Read/Append Binary)
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值