我正在尝试在C++中尝试尝试,捕获和引发语句以进行文件处理,并且我编写了一个伪代码来捕获所有错误。我的问题是为了检查我是否正确,我需要发生错误。现在,我只需在目录中不创建所需名称的文件即可轻松检查infile.fail()。但是我将如何检查outfile.fail()(outfileofstream,而infileifstream)。在这种情况下,outfile.fail()的值是否为true?

示例代码(摘自对unapersson的回答的注释,简化后使问题更清晰-zack):

#include <fstream>
using std::ofstream;

int main()
{
    ofstream outfile;
    outfile.open("test.txt");
    if (outfile.fail())
        // do something......
    else
        // do something else.....
    return 0;
}

最佳答案

Linux上的 open(2) 手册页有大约30个条件。一些有趣的是:

  • 如果文件存在并且您没有写权限。
  • 如果该文件不存在,并且您没有权限(在目录上)创建该文件。
  • 如果您对某些父目录没有搜索权限。
  • 如果您为文件名传入伪造的char*
  • 如果在打开设备文件时按CTRL-C。
  • 如果内核在解析名称时遇到太多符号链接(symbolic link)。
  • 如果您尝试打开要写入的目录。
  • 如果路径名太长。
  • 如果您的进程已打开太多文件。
  • 如果系统已打开太多文件。
  • 如果路径名指向设备文件,并且系统中没有此类设备。
  • 如果内核内存不足。
  • 如果文件系统已满。
  • 如果路径名的组成部分不是目录。
  • 如果文件位于只读文件系统上。
  • 如果文件是当前正在执行的可执行文件。
  • 关于c++ - ofstream::open何时会失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5835848/

    10-11 17:26