我正在尝试检查给定的路径是否存在。如果没有,我想创建一个在同一目录中给出名称的文件夹。
让我们说pathOne:“/ home / music / A”和pathTwo:“/ home / music / B”,文件夹A存在但文件夹B不存在。如果用户给出的路径是pathOne,但是如果它的pathTwo,那么程序应该意识到它在/ home中不存在并且应该创建它。
我知道可以检查文件是否存在(fopen可能会这样做),但我不知道如何为文件夹做这些!
答案 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。