检查文件夹路径

时间:2011-06-06 12:33:24

标签: c++ directory

我正在尝试检查给定的路径是否存在。如果没有,我想创建一个在同一目录中给出名称的文件夹。

让我们说pathOne:“/ home / music / A”和pathTwo:“/ home / music / B”,文件夹A存在但文件夹B不存在。如果用户给出的路径是pathOne,但是如果它的pathTwo,那么程序应该意识到它在/ home中不存在并且应该创建它。

我知道可以检查文件是否存在(fopen可能会这样做),但我不知道如何为文件夹做这些!

4 个答案:

答案 0 :(得分:4)

Windows对POSIX提供了非常不稳定的支持,但这是它可以做的事情之一,因此我的解决方案适用于Linux / Mac / POSIX / Windows):

bool directory_exists( const std::string &directory )
{
    if( !directory.empty() )
    {
        if( access(directory.c_str(), 0) == 0 )
        {
            struct stat status;
            stat( directory.c_str(), &status );
            if( status.st_mode & S_IFDIR )
                return true;
        }
    }
    // if any condition fails
    return false;
}
bool file_exists( const std::string &filename )
{
    if( !filename.empty() )
    {
        if( access(filename.c_str(), 0) == 0 )
        {
           struct stat status;
           stat( filename.c_str(), &status );
           if( !(status.st_mode & S_IFDIR) )
               return true;
        }
    }
    // if any condition fails
    return false;
}

请注意,如果您愿意,可以轻松地将参数更改为const char*

另请注意,可以通过检查different values of status.st_mode以特定于平台的方式添加符号链接等。

答案 1 :(得分:3)

您可以使用'dirent.h'中的opendir功能并检查ENOENT作为返回值。

此头文件在Windows上不可用。在Windows上,您使用GetFileAttributes并检查INVALID_FILE_ATTRIBUTES作为返回值。

答案 2 :(得分:3)

您应该可以使用Boost Filesystem exists function。它也是便携式的。

有一个非常好的教程描述了这个名为Using status queries to determine file existence and type - (tut2.cpp)

的场景

答案 3 :(得分:1)

查看boost filesystem library。它具有非常方便和高级的界面,例如, exists(path)is_directory(path)等。

在Linux操作系统级别,您可以使用stat