C / C ++使用自动递归文件夹/目录创建复制文件

时间:2009-12-21 07:28:30

标签: c++ c winapi file-io

在Win32 API中,有CopyFile字面上复制文件。但是,此API不会创建文件夹。例如,我想将C:\Data\output.txt复制到D:\Temp\Data\output.txt。但是,目标文件夹D:\TempD:\Temp\Data'不存在。在这种情况下,此API失败。

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

2 个答案:

答案 0 :(得分:6)

SHFileOperation应该做到这一点。来自MSDN:

  

复制和移动操作可以指定   没有的目标目录   存在。在那些情况下,系统   尝试通常创建它们   显示一个询问用户的对话框   如果他们想要创造新的   目录。要禁止此对话框   并创建目录   默默地设置FOF_NOCONFIRMMKDIR   fFlags中的旗帜。

答案 1 :(得分:0)

您可以使用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
}