【问题标题】:std::ofstream - setting seekp to wrong positionstd::ofstream - 将 seekp 设置到错误的位置
【发布时间】:2018-12-13 05:35:53
【问题描述】:

我已阅读 cpp 参考资料,但我找不到我的问题的答案。我想知道如果我有空文件并尝试在不存在的位置写一些东西,那么保证会发生什么,就像这样:

std::ofstream stream(path);
stream.seekp(1234);
stream.write(whatever, sizeof(whatever));

由于异常处理,我在问我的问题。

【问题讨论】:

  • 这更多是依赖于操作系统的东西。
  • 当你新建一个空文件时,一切都是“不存在的位置”。只从头开始写并不是。某些操作系统只会将您编写的部分保留为sparse file。其他人可能会用一些填充来填充磁盘上的漏洞,比如零。
  • 在最好的时候告诉和寻找是很有趣的。无法保证他们使用的数字很有意义。可以保证的是,如果您在同一流中使用相同的数字,您将在流中获得相同的位置,如果该位置仍然存在。

标签: c++ file exception error-handling ofstream


【解决方案1】:

我刚刚调试了它:

  #include <fstream>      // std::ofstream
  #include <iostream>
  using namespace std;
  int main () {

  std::ofstream outfile;
  outfile.open ("C:\\Users\\Mohammad\\Desktop\\test.txt");
  outfile.seekp(1234);
  if (outfile.is_open())
  {
  outfile.write ("This is an apple",16);
  outfile.write (" sam",4);
  outfile.close();
  cout<<"done";
  }
  if(!outfile)
   {
   cout<<"error!";
   }
   return 0;
   }

结果在控制台中“完成”,没有任何错误。 即使该文件在路径中不存在,它也没有任何错误。

编译照片: https://pasteboard.co/HsWql4y.png

【讨论】:

  • 老兄!我刚刚编译了它
  • @Kasata Ata ,我只是让您可以轻松编译它并更改代码以获得您想要的东西。
  • 当我在 Windows (g++4.9) 上运行修改后的版本时,这与当前的编辑非常相似,我得到了一个充满空值的文件,该文件以我放置的位置写入的数据结尾。问题是你不能指望这种行为。 C++ 标准并未明确定义将要发生的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多