如何检查一个文件是否存在,并在C ++中可读?

我有一个fstream my_file(“test.txt”),但我不知道test.txt是否存在。 如果存在的话,我想知道我是否也可以阅读。 怎么做?

我使用Linux。

我可能会去:

ifstream my_file("test.txt"); if (my_file.good()) { // read away } 

good方法检查stream是否准备好被读取。

你可以使用Boost.Filesystem 。 它有一个boost::filesystem::exist函数。

我不知道如何检查读取权限。 你也可以看看Boost.Filesystem 。 然而,可能不会有其他的(便携式)方式,而不是尝试实际读取文件。

什么操作系统/平台?

在Linux / Unix / MacOSX上,您可以使用fstat 。

在Windows上,您可以使用GetFileAttributes 。

通常,使用标准的C / C ++ IO函数没有可行的方法。

如果你使用的是unix, access()会告诉你它是否可读。 但是,如果ACL正在使用,那么它变得更加复杂,在这种情况下,最好只是用ifstream打开文件,然后尝试读取。如果不能读取,则ACL可能禁止读取。

因为C ++ 11可以使用隐式运算符bool而不是good()

 ifstream my_file("test.txt"); if (my_file) { // read away } 

我知道海报最终说他们正在使用Linux,但我有点惊讶,没有人提到Windows的PathFileExists() API调用。

您将需要包含Shlwapi.lib库和Shlwapi.h头文件。

 #pragma comment(lib, "shlwapi.lib") #include <shlwapi.h> 

该函数返回一个BOOL值,可以这样调用:

 if( PathFileExists("C:\\path\\to\\your\\file.ext") ) { // do something } 

关于在Windows中使用fstat,我不知道是否是你想要的。 从微软的文件必须已经打开。 Stat应该为你工作。