打开不存在的文件时如何使流构造函数失败?



我希望打开不存在的输出文件失败。仅当输出文件存在时,我才希望打开成功。如何使用 ofstream 构造函数执行此操作?

std::ofstream的构造函数采用指定如何打开文件的std::ios_base::openmode。 默认情况下,此值设置为ios_base::out,如果文件不存在,则将创建该文件。 不过,您可以提供自己的模式,如果您使用std::ios_base::out | std::ios_base::in则不会创建任何文件。 这将使您的代码如下所示:

std::ofstream fout("some_file.ext", std::ios_base::out | std::ios_base::in);

您不能更改std::ofstream的构造函数。

您可以做的是定义自己的自定义流类。您自己的流可以检查文件是否存在,如果不存在,则失败。如果该文件存在,则可以将功能委托给作为数据成员包含的 ofstream。

另一种不需要自定义流的方法可能是更改代码,在首次验证文件存在之前甚至不尝试构造流。

最新更新