【问题标题】:What does it mean to open an output file as both input and output?将输出文件同时作为输入和输出打开是什么意思?
【发布时间】:2014-01-12 16:07:55
【问题描述】:

我有时会看到这样的代码:

ofstream of("out.txt", ofstream::in | ofstream::out);

为什么它同时作为输入和输出打开?这样做有什么意义?

【问题讨论】:

  • 如果你想从同一个文件中读写,这是一个好的开始。
  • @elyashiv 但这是输出文件而不是输入文件...
  • 这很没有意义,输入和输出必须是std::fstream
  • @Paranaix 但我看到有人用ofstream 这样做,我很困惑。
  • @user2030677 我看到的唯一可能的用法是直接对流缓冲区进行操作,它当时也支持输入操作。但我宁愿认为编写此类代码的人搞砸了。

标签: c++


【解决方案1】:

有时需要读取一个文件,进行一些处理,然后用一些新信息更新原始文件。为输入和输出打开文件允许您在不关闭和重新打开的情况下执行此操作。

它还明确了一个人对文件的意图。

编辑:我的原始答案没有考虑到 OP 的示例使用 ofstream 而不是 fstream。所以……

ofstreamstd::in 一起使用没有任何意义。是否在流上执行了读取?如果不是,那么最初编写的代码可能使用了fstream,后来改为ofstream。这种东西可以潜入处于维护模式的代码库中。

【讨论】:

  • 但这是一个输出文件。我希望使用fstream 完成双向 I/O。
  • 对。也许以这种方式编码的人很困惑;)
【解决方案2】:

由于您使用的是ofstream,因此您无法在流中使用任何输入函数。然后以读写模式打开文件并没有什么害处,但它毫无意义,除非你要开始破解底层流。

它可能是样板,是从互联网上的一些教程中复制/粘贴的,而作者没有真正理解它。

【讨论】:

    【解决方案3】:

    这对实际的流没有任何意义。 std::ios_base::in openmode 将被忽略。但是对于底层的流缓冲区,它确实意味着作为输入和输出打开的东西:例如,文件流和字符串流缓冲区允许放回功能,但它只能在缓冲区'@ 987654322@指定输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多