检查文件夹路径

Check folder path

本文关键字:路径 文件夹 检查      更新时间:2023-10-16

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

假设pathOne:"/home/music/A"和pathTwo:"/home/music/B",这样文件夹A存在,但文件夹B不存在。如果用户给出的路径是pathOne,则不会发生任何事情,但如果是pathTwo,则程序应该意识到它不存在于/home中,并应该创建它。

我知道可以从文件中检查是否存在(使用fopen可以做到这一点),但我不知道如何对文件夹进行检查!

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*

还要注意,可以通过检查status.st_mode的不同值,以特定于平台的方式添加符号链接等。

您应该能够使用Boost Filesystem exists函数。它也是便携式的。

有一个非常好的教程描述了这个场景,名为"使用状态查询来确定文件的存在和类型-(tut2.cpp)

"

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

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

查看boost文件系统库。它有一个非常方便和高级的接口,例如exists(path)is_directory(path)

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