【发布时间】:2010-11-25 07:47:22
【问题描述】:
当给出这样的路径时,有什么方便的方法来创建目录:“\server\foo\bar\”
注意中间目录可能不存在。
CreateDirectory 和 mkdir 似乎只创建目录的最后一部分,否则会出错。
平台是windows,MSVC编译器。
谢谢!
【问题讨论】:
当给出这样的路径时,有什么方便的方法来创建目录:“\server\foo\bar\”
注意中间目录可能不存在。
CreateDirectory 和 mkdir 似乎只创建目录的最后一部分,否则会出错。
平台是windows,MSVC编译器。
谢谢!
【问题讨论】:
如果你可以使用外部库,我会看boost::filesystem
#include <boost/filesystem.hpp>
namespace fs=boost::filesystem;
int main(int argc, char** argv)
{
fs::create_directories("/some/path");
}
【讨论】:
SHCreateDirectoryEx() 可以做到这一点。它适用于 XP SP2 和更新版本的 Windows。
【讨论】:
SHCreateDirectory 在 XP SP2 和 Server 2003 (msdn.microsoft.com/en-us/library/bb762130(v=vs.85).aspx) 之后被弃用。它没有提到 SHCreateDirectoryEx 被弃用。
我会写一个循环。将路径拆分为组件,然后“走它”,即从头开始,检查它是否存在。如果是,请输入并继续。如果没有,请创建它,输入它并继续。对于奖励积分,检测组件是否存在,但它是文件而不是目录。
【讨论】:
您也可以使用Boost::Filesystem 库中的template bool create_directories(const Path & p)。而且它不仅在 Windows 中可用。
【讨论】:
自C++17:
bool create_directories( const std::filesystem::path& p );
bool create_directories( const std::filesystem::path& p, std::error_code& ec );
更多信息:https://en.cppreference.com/w/cpp/filesystem/create_directory
【讨论】: