c++ ifstream:如何判断指定的文件是否不存在

fdbelqdn  于 2022-12-01  发布在  其他
关注(0)|答案(9)|浏览(220)

我想打开一个文件进行读取。然而,在这个程序的上下文中,如果文件不存在也没关系,我只是继续前进。我想能够识别什么时候错误是“找不到文件”,什么时候错误是其他的。否则意味着我需要退出并出错。
我看不出用fstream做这件事有什么明显的方法。
我可以用C的open()perror()来做这件事,我假设也有一个fstream的方法来做这件事。

mo49yndu

mo49yndu1#

编辑:我已经被告知,这并不一定表明一个文件不存在,因为它可能是由于访问权限或其他问题标记以及。
我知道我已经很晚才回答这个问题,但是我想我还是要给浏览的人留下一条评论。你可以使用ifstream的失败指示器来判断一个文件是否存在。

ifstream myFile("filename.txt");
    if(myFile.fail()){
        //File does not exist code here
    }
//otherwise, file exists
of1yzvn4

of1yzvn42#

我不认为你可以知道“文件不存在”。你可以使用is_open()进行一般性检查:

ofstream file(....);
if(!file.is_open())
{
  // error! maybe the file doesn't exist.
}

如果使用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 
    }
}
v440hwme

v440hwme3#

由于打开文件的结果是特定于操作系统的,我不认为标准C++有任何方法来区分各种类型的错误。
你可以试着打开文件进行读取,如果它没有打开(ifstream::is_open()返回false),你就知道它不存在或者发生了其他错误。

z5btuh9x

z5btuh9x4#

http://www.cplusplus.com/forum/general/1796/开始的简单方法

ifstream ifile(filename);
if (ifile) {
  // The file exists, and is open for input
}
kxe2p93d

kxe2p93d5#

您可以使用stat,它应该可以跨平台移植,并且位于标准C库中:

#include <sys/stat.h>

bool FileExists(string filename) {
    struct stat fileInfo;
    return stat(filename.c_str(), &fileInfo) == 0;
}

如果stat返回0,则文件(或目录)存在,否则不存在。我假设您必须对文件路径中的所有目录都具有访问权限。我还没有测试可移植性,但this page建议这应该不是问题。

uoifb46i

uoifb46i6#

更妙的道:

std::ifstream stream;
stream.exceptions(std::ifstream::failbit | std::ifstream::badbit);
stream.open(fileName, std::ios::binary);
ukdjmx9f

ukdjmx9f8#

让我举一个真实跑步的例子:
1.文件不存在:

1.文件已存在:

有关其公共函数更多信息,请参见http://www.cplusplus.com/reference/fstream/ifstream/

daupos2t

daupos2t9#

直接方式而不创建ifstream对象。

if (!std::ifstream(filename))
{
     // error! file doesn't exist.
}

相关问题