How to check if a file exists and is readable in C++?

匿名 (未验证) 提交于 2019-12-03 02:14:01

问题:

I've got a fstream my_file("test.txt"), but I don't know if test.txt exists. In case it exists, I would like to know if I can read it, too. How to do that?

I use Linux.

回答1:

I would probably go with:

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

The good method checks if the stream is ready to be read from.



回答2:

You might use Boost.Filesystem. It has a boost::filesystem::exist function.

I don't know how about checking read access rights. You could look in Boost.Filesystem too. However likely there will be no other (portable) way than try to actually read the file.



回答3:

What Operating System/platform?

On Linux/Unix/MacOSX, you can use fstat.

On Windows, you can use GetFileAttributes.

Usually, there is no portable way of doing this with standard C/C++ IO functions.



回答4:

if you are on unix then access() can tell you if it's readable. However if ACL's are in use, then it gets more complicated, in this case it's best to just open the file with ifstream and try read.. if you cannot read then the ACL may prohibit reading.



回答5:

Since C++11 it's possible to use implicit operator bool instead of good():

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


回答6:

I know the poster eventually said they were using Linux, but I'm kind of surprised that no one mentioned the PathFileExists() API call for Windows.

You will need to include the Shlwapi.lib library, and Shlwapi.h header file.

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

the function returns a BOOL value and can be called like so:

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


回答7:

Concerning the use of fstat in windows, I am not sure if it is what you want. From Microsoft the file must be already open. Stat should work for you.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!