2009-12-21 79 views
4

在Win32 API中,有CopyFile從字面上複製文件。但是,此API不會創建文件夾。例如,我想將C:\Data\output.txt複製到D:\Temp\Data\output.txt。但是,目標文件夾D:\TempD:\Temp\Data'不存在。在這種情況下,這個API只是失敗。帶有自動遞歸文件夾/目錄創建的C/C++複製文件

是否有一個方便的API,可以自動遞歸創建複製目錄結構?當然,我可以做出這樣的功能,但我希望有人已經做出了這個功能。

回答

5

SHFileOperation應該這樣做。從MSDN:

複製和移動操作可以指定 目標目錄不存在 。在這些情況下,系統 會嘗試創建它們,通常 會顯示一個對話框,以詢問用戶 是否要創建新的 目錄。要禁止此對話框 並且以靜默方式創建目錄 ,請在fFlags中設置FOF_NOCONFIRMMKDIR 標誌。

+1

謝謝。 'SHFileOperation'創建文件夾結構,但是在實際的文件拷貝中有一些小故障。它只是創建了一個名稱爲源文件名的文件夾!無論如何,'SHFileOperation' +'CopyFile'完成了這項工作。 – minjang 2009-12-21 08:09:52

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 
} 
+0

'SHCreateDirectoryEx'已被棄用,但我仍然沒有找到任何方便的東西! – sergiol 2017-05-19 18:19:55

相關問題