我想打开一个文件进行阅读.但是,在这个程序的上下文中,如果文件不存在就可以了,我继续.我希望能够识别错误何时"未找到文件"以及何时出现错误.否则意味着我需要退出并出错.
我没有看到一个明显的方法来做到这一点fstream.
我可以用C open()和perror().我推测有一种fstream方法可以做到这一点.
Swa*_*oth 60
编辑:我已收到通知,这并不一定表明文件不存在,因为它可能会因访问权限或其他问题而被标记.
我知道我回答这个问题的时间已经很晚了,但我认为无论如何我都会留下评论给任何人浏览.您可以使用ifstream的失败指示器来判断文件是否存在.
ifstream myFile("filename.txt");
if(myFile.fail()){
//File does not exist code here
}
//otherwise, file exists
Run Code Online (Sandbox Code Playgroud)
Ara*_*raK 38
我认为你不知道"文件不存在".您可以使用is_open()进行泛型检查:
ofstream file(....);
if(!file.is_open())
{
// error! maybe the file doesn't exist.
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用,boost您可以使用boost::filesystem:
#include <boost/filesystem.hpp>
int main()
{
boost::filesystem::path myfile("test.dat");
if( !boost::filesystem::exists(myfile) )
{
// what do you want to do if the file doesn't exist
}
}
Run Code Online (Sandbox Code Playgroud)
由于打开文件的结果是特定于操作系统的,我认为标准C++没有任何方法可以区分各种类型的错误.该文件打开或不打开.
您可以尝试打开文件进行读取,如果没有打开,您知道它不存在或发生其他错误.然后,再次,如果你试图打开它后写,它失败,那可能属于"别的"类别.
一个简单的方法来自http://www.cplusplus.com/forum/general/1796/
ifstream ifile(filename);
if (ifile) {
// The file exists, and is open for input
}
Run Code Online (Sandbox Code Playgroud)
您可以使用stat,它应该可以跨平台移植,并且位于标准C库中:
#include <sys/stat.h>
bool FileExists(string filename) {
struct stat fileInfo;
return stat(filename.c_str(), &fileInfo) == 0;
}
Run Code Online (Sandbox Code Playgroud)
如果stat返回0,则文件(或目录)存在,否则不存在.我假设你必须拥有文件路径中所有目录的访问权限.我没有测试过可移植性,但是这个页面表明它应该不是问题.