Ich möchte den Ordner A kopieren und auf dem Desktop einfügen.
Ich verwende derzeit C++, also vorzugsweise eine OO-Schnittstelle, wenn verfügbar.
Ich möchte den Ordner A kopieren und auf dem Desktop einfügen.
Ich verwende derzeit C++, also vorzugsweise eine OO-Schnittstelle, wenn verfügbar.
Unter Windows (Win32) können Sie Folgendes verwenden SHFileOperation , z.B.:
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);
Verwenden Sie diese
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;
}
Beginnend mit Visual Studio 2015 können Sie std::filesystem::copy
die sogar plattformunabhängig ist, da sie in Implementierungen verfügbar ist, die >= C++17 unterstützen.
#include <exception>
#include <experimental/filesystem> // C++-standard filesystem header file in VS15, VS17.
#include <iostream>
namespace fs = std::experimental::filesystem; // experimental for VS15, VS17.
/*! Copies all contents of path/to/source/directory to path/to/target/directory.
*/
int main()
{
fs::path source = "path/to/source/directory";
fs::path targetParent = "path/to/target";
auto target = targetParent / source.filename(); // source.filename() returns "directory".
try // If you want to avoid exception handling then use the error code overload of the following functions.
{
fs::create_directories(target); // Recursively create target directory if not existing.
fs::copy(source, target, fs::copy_options::recursive);
}
catch (std::exception& e) // Not using fs::filesystem_error since std::bad_alloc can throw too.
{
std::cout << e.what();
}
}
Ändern Sie das Verhalten von fs::copy
con std::filesystem::copy_options
. Ich habe verwendet std::filesystem::path::filename
um den Namen des Quellverzeichnisses abzurufen, ohne ihn manuell eingeben zu müssen.
Für eine plattformunabhängige Lösung würde ich Folgendes vorschlagen Boost::Dateisystem . Dieser Link ist im Wesentlichen das Referenzmaterial. Es gibt eine copy_file
Methode, die eine Datei von einem Ort zu einem anderen kopiert.
Unter Windows ist der Desktop ein spezieller Ordner:
// 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?
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.