在Windows上有一个复制文件夹的界面?

我想复制文件夹A并粘贴到桌面。

我目前正在使用C ++,所以最好是一个OO接口(如果可用)。

Solutions Collecting From Web of "在Windows上有一个复制文件夹的界面?"

在Windows(Win32)上,您可以使用SHFileOperation ,例如:

SHFILEOPSTRUCT s = { 0 }; s.hwnd = m_hWnd; s.wFunc = FO_COPY; s.fFlags = FOF_SILENT; s.pTo = "C:\\target folder\0"; s.pFrom = "C:\\source folder\\*\0"; SHFileOperation(&s); 

用这个

 bool CopyDirTo( const wstring& source_folder, const wstring& target_folder ) { wstring new_sf = source_folder + L"\\*"; WCHAR sf[MAX_PATH+1]; WCHAR tf[MAX_PATH+1]; wcscpy_s(sf, MAX_PATH, new_sf.c_str()); wcscpy_s(tf, MAX_PATH, target_folder.c_str()); sf[lstrlenW(sf)+1] = 0; tf[lstrlenW(tf)+1] = 0; SHFILEOPSTRUCTW s = { 0 }; s.wFunc = FO_COPY; s.pTo = tf; s.pFrom = sf; s.fFlags = FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NO_UI; int res = SHFileOperationW( &s ); return res == 0; } 

(假设Windows)

使用可以使用ShFileOperation(或Vista上的IFileOperation :: CopyItem)。 最大。

对于平台不可知的解决方案,我会建议Boost :: filesystem 。 那个链接基本上是参考资料。 有一个copy_file方法将文件从一个位置复制到另一个位置。

在Windows上,桌面是一个特殊的文件夹:

 // String buffer for holding the path. TCHAR strPath[ MAX_PATH ]; // Get the special folder path. SHGetSpecialFolderPath( 0, // Hwnd strPath, // String buffer. CSIDL_DESKTOPDIRECTORY, // CSLID of folder FALSE ); // Create if doesn't exists? 

从Visual Studio 2015开始,您可以使用std::filesystem::copy ,因为它可以在支持> = C ++ 17的实现中使用,所以它甚至与平台无关。

 #include <exception> #include <experimental/filesystem> // C++-standard filesystem header file in VS15, VS17. namespace fs = std::experimental::filesystem; // experimental for VS15, VS17. /*! Copies all contents of path/to/source/folder to path/to/target/folder. */ int main() { fs::path source = "path/to/source/folder"; fs::path target = "path/to/target"; try { fs::copy(source, target / source.filename(), fs::copy_options::recursive); } catch (std::exception& e) { // Not using fs::filesystem_error since std::bad_alloc can throw too. // Handle exception or use error code overload of fs::copy. } } 

另请参见std::filesystem::copy_optionsstd::filesystem::path::filename

有用

 #include <iostream> int main() { system("xcopy C:\\Users\\Elmi\\Desktop\\AAAAAA\ C:\\Users\\Elmi\\Desktop\\b\ /e /i /h"); return 0; } 

这是一个使用SHFileOperation的例子:

http://msdn.microsoft.com/en-us/library/bb776887%28VS.85%29.aspx#example

没有它,快速入门:

 #import <stdlib.h> int main(int argc, char *argv[]) { system("robocopy \"C:\\my\\folder\" \"%userprofile%\\desktop\\\" /MIR"); return 0; }