在Win32 API中,有CopyFile字面上复制文件。但是,此API不会创建文件夹。例如,我想将C:\Data\output.txt
复制到D:\Temp\Data\output.txt
。但是,目标文件夹D:\Temp
和D:\Temp\Data
'不存在。在这种情况下,此API失败。
是否有一个方便的API可以自动和递归地在副本上创建目录结构?当然,我可以做这样的功能,但我希望有人已经发挥了这个功能。
答案 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
}