我正在使用fstream库来处理文件。基本上,我需要知道某个文件是否存在。在c留档online中,关于open(),它是这样的:
返回值
没有一个
如果函数无法打开文件,则会为流设置failbit状态标志(如果使用成员异常注册该状态标志,则可能引发ios\U base::failure)。
它说没有指定返回值。但在失败的情况下,会设置一个标志。我的问题是,我应该访问该标志,或者更好地问,我应该如何查看open()
是否成功。
到目前为止,我有以下代码:
int Log::add()
{
fstream fileStream;
fileStream.open("logs.txt");
}
请注意,“文件存在”和“文件可以打开”之间有区别。
要检查文件是否存在(并且确实不需要打开/读取/写入文件),请使用fstat或其c对应项-您不需要任何权限来查询信息。
请注意,如果要在打开文件之前检查文件是否存在,则操作错误。在检查和实际尝试打开文件之间,情况可能发生了变化。通常,只需使用“打开/创建”选项直接打开文件,而无需事先进行检查。
您的方法不检查存在性,而是检查可访问性。可以这样检查是否存在:
#include <sys/stat.h>
inline bool exists (const std::string& filename) {
struct stat buffer;
return (stat (filename.c_str(), &buffer) == 0);
}
在C 14中,可以使用:
#include <experimental/filesystem>
bool exist = std::experimental::filesystem::exists(filename);
#include <filesystem>
bool exist = std::filesystem::exists(filename);
它说,如果文件无法打开,它会设置故障位。因此,您可以检查该位:
fileStream.open("logs.txt");
if (fileStream.fail()) {
// file could not be opened
}
实际上,if(fileStream)也可以在这里工作,因为ios(ifstream、stream和fstream的基类)有一个到bool的转换操作符。
不要担心失败异常。您可以通过调用ios::exceptions请求在失败时引发异常,但默认情况下,在失败时不会引发异常。
请注意,这并没有告诉您为什么无法打开文件。可能是文件不存在,路径中的目录不存在,您没有打开文件的权限,您的程序已经达到了它可以打开的文件数量的限制,等等。没有可移植的方法来确定原因。
我想确定C 11中是否存在一个文件 我有以下代码: 和 哪一个是正确的和惯用的?
问题内容: 我正在使用Java 7 IO的新功能,实际上我试图接收文件夹的所有xml文件。但这在文件夹不存在时引发异常,如何检查新IO是否存在该文件夹? 问题答案: 使用: 您可以选择传递此方法的值: 还有一种方法:
使用数据库时,您可以执行< code>snapshot.exists()来检查某些数据是否存在。根据文件,没有类似的储存方法。 https://firebase.google.com/docs/reference/js/firebase.storage.Reference 检查某个文件是否存在于Firebase存储中的正确方法是什么?
问题内容: 在我的代码中的某些情况下,只有在定义了该函数的情况下,我最终才调用该函数,否则我不应该调用该函数。我怎样才能做到这一点? 提出此问题的另一种方法可能是:如何确定函数是否在运行时定义,如果是,则调用。 问题答案: 尽管其他答复是有用的建议(,函数指针等),但是您 不能编译 引用不存在的函数的C ++代码。至少必须 声明 函数;如果不是,您的代码将无法编译。如果没有任何内容(编译单元,某些
问题内容: 我有一个fstream my_file(“ test.txt”),但我不知道test.txt是否存在。如果存在,我也想知道是否也可以阅读。怎么做? 我使用Linux。 问题答案: 我可能会选择: 该方法检查流是否准备好从中读取。
问题内容: 尝试检查我要读取的文件是否存在。 问题答案: 这是另一种方法: 包装的用途和功能: p_DirName in varchar2, – schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName),