检查文件夹路径
Check folder path
我正在尝试检查给定的路径是否存在。如果没有,我想在同一目录中创建一个名为的文件夹。
假设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.
相关文章:
- 如何将更多文件夹添加到c++include路径
- [android ndk]如何获取资产文件夹中文件的绝对路径?
- 获取 exe 文件夹路径的最佳方法?
- cmake find_package CMakeLists.txt 子文件夹中的相对路径
- 从 FutureAccessList 同步获取文件夹路径
- 如何将用于创建文件的文件的路径提供给C++中的其他文件夹
- Boost Filesystem flowly_caronical不会在没有父文件夹的情况下解决相对路径
- C/C++ 从根位置搜索文件夹并返回绝对路径
- C++ 程序 [窗口] 的资产文件夹路径
- C 获取目录路径,解析文件夹名称和来自Parent Directory的打印文件内容
- 代码块,添加了环境变量路径,但在安装文件夹之外出现 g++ 错误
- 仅资源 DLL - 文件夹、路径
- 如何获取哪些快捷方式和文件在桌面等文件夹路径中突出显示
- 通过浏览按钮仅获取文件夹路径
- 如何删除回收站中路径过长的文件夹或文件
- KQUEUE 仅适用于文件夹路径
- 使用字符串在C++中指定文件路径(将文件存储在文件夹中)
- Windows 8:如何以编程方式读取用户文档文件夹路径(使用 c)
- 如何获取完整路径的文件夹和文件部分
- 在Windows运行时组件中使用WRL获取文件夹路径返回空字符串