当 fail() 为真时检测无法打开 ofstream 的原因

新手上路,请多包涵

看起来这应该很简单,但我在网络搜索中找不到它。

我有一个 open()fail() 现在是真的。我想知道打开失败的原因,比如 errno 我会做 sys_errlist[errno]

原文由 WilliamKF 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 694
2 个回答

不幸的是,没有标准的方法可以准确地找出 open() 失败的原因。请注意, sys_errlist 不是标准 C++(或标准 C,我相信)。

原文由 anon 发布,翻译遵循 CC BY-SA 2.5 许可协议

来自 <cstring>strerror 函数可能有用。这不一定是标准的或可移植的,但它适用于我在 Ubuntu 机器上使用 GCC:

 #include <iostream>
using std::cout;
#include <fstream>
using std::ofstream;
#include <cstring>
using std::strerror;
#include <cerrno>

int main() {

  ofstream fout("read-only.txt");  // file exists and is read-only
  if( !fout ) {
    cout << strerror(errno) << '\n'; // displays "Permission denied"
  }

}

原文由 Nate Kohl 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题