【问题标题】:c++ how to create a directory from a pathc ++如何从路径创建目录
【发布时间】:2010-11-25 07:47:22
【问题描述】:

当给出这样的路径时,有什么方便的方法来创建目录:“\server\foo\bar\”

注意中间目录可能不存在。

CreateDirectory 和 mkdir 似乎只创建目录的最后一部分,否则会出错。

平台是windows,MSVC编译器。

谢谢!

【问题讨论】:

    标签: c++ directory


    【解决方案1】:

    如果你可以使用外部库,我会看boost::filesystem

    #include <boost/filesystem.hpp>
    namespace fs=boost::filesystem;
    
    int main(int argc, char** argv)
    {
        fs::create_directories("/some/path");
    }
    

    【讨论】:

      【解决方案2】:

      SHCreateDirectoryEx() 可以做到这一点。它适用于 XP SP2 和更新版本的 Windows。

      【讨论】:

      • 已弃用:“[此功能在 Windows XP Service Pack 2 (SP2) 和 Windows Server 2003 中可用。它可能在 Windows 的后续版本中被更改或不可用。]"
      • @Technophile - 根据 MSDN,SHCreateDirectory 在 XP SP2 和 Server 2003 (msdn.microsoft.com/en-us/library/bb762130(v=vs.85).aspx) 之后被弃用。它没有提到 SHCreateDirectoryEx 被弃用。
      • 目前看来 SHCreateDirectoryEx 也已被弃用:msdn.microsoft.com/en-us/library/bb762131(v=vs.85).aspx
      【解决方案3】:

      我会写一个循环。将路径拆分为组件,然后“走它”,即从头开始,检查它是否存在。如果是,请输入并继续。如果没有,请创建它,输入它并继续。对于奖励积分,检测组件是否存在,但它是文件而不是目录。

      【讨论】:

      • 谢谢,好主意。虽然我希望 winapi 或 stl 中有一个函数可以做到这一点?
      【解决方案4】:

      您也可以使用Boost::Filesystem 库中的template bool create_directories(const Path & p)。而且它不仅在 Windows 中可用。

      【讨论】:

        【解决方案5】:

        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

        【讨论】:

          猜你喜欢
          • 2019-06-08
          • 2014-03-08
          • 2016-07-08
          • 2021-10-02
          • 1970-01-01
          • 2011-01-09
          • 1970-01-01
          • 2015-07-24
          • 1970-01-01
          相关资源
          最近更新 更多