代码之家  ›  专栏  ›  技术社区  ›  minjang

具有自动递归文件夹/目录创建的C/C++复制文件

  •  4
  • minjang  · 技术社区  · 16 年前

    在win32 api中,有 CopyFile 实际上是复制一个文件。但是,此API不会创建文件夹。例如,我想复制 C:\Data\output.txt D:\Temp\Data\output.txt . 但是,目标文件夹, D:\Temp D:\Temp\Data '不存在。在这种情况下,这个API失败了。

    是否有一个方便的API可以在复制时自动和递归地创建目录结构?当然,我可以做这样的功能,但我希望已经有人做了这个功能。

    2 回复  |  直到 10 年前
        1
  •  5
  •   Aaron Klotz    16 年前

    SHFileOperation 应该有技巧。来自MSDN:

    复制和移动操作可以指定 目标目录没有 存在。在这些情况下,系统 尝试创建它们,通常 显示一个对话框询问用户 如果他们想创建新的 目录。取消此对话框 并创建目录 安静地,设置 FOF_NOCONFIRMMKDIR 标记 fFlags .

        2
  •  0
  •   Marko Popovic    10 年前

    您可以使用 SHCreateDirectoryEx .下面是一个例子:

    inline void EnsureDirExists(const std::wstring& fullDirPath)
    {
        HWND hwnd = NULL;
        const SECURITY_ATTRIBUTES *psa = NULL;
        int retval = SHCreateDirectoryEx(hwnd, fullDirPath.c_str(), psa);
        if (retval == ERROR_SUCCESS || retval == ERROR_FILE_EXISTS || retval == ERROR_ALREADY_EXISTS)
        return; //success
    
        throw boost::str(boost::wformat(L"Error accessing directory path: %1%; win32 error code: %2%") 
           % fullDirPath
           % boost::lexical_cast<std::wstring>(retval));
    
        //TODO *djg* must do error handling here, this can fail for permissions and that sort of thing
    }