如何检查一个文件是否存在,并在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应该为你工作。