Dateien / Verzeichnisse kopieren
-
Theoretisch ginge das mit den einzelnen Dateien schon - du kannst ja mit FindFirstFile & Co. (siehe FAQ) die Dateien aus dem Verzeichnis durchgehen und dann kopieren. Es geht aber auch einfacher: SHFileOperation

-
Danke!
Ich werde es testen!!
-
Wie funktioniert das mit der SHfile Operation?
Hast du ein Beispiel parat?
Also die Microsoft hilfe in Englisch ist wohl etwas zu kompliziert für mich.
-
Ist ungetestet:
// [...] #include <shellapi.h> // [...] SHFILEOPSTRUCT foCopy; foCopy.hwnd = hWnd; // Handle deines Hauptfensters oder NULL, wenn du keines hast foCopy.wFunc = FO_COPY; foCopy.pFrom = "c:\\archiv\\*.dbx\0"; foCopy.pTo = "c:\\windows\\Mails\0"; foCopy.fFlags = FOF_FILESONLY | FOF_NOCONFIRMATION; // evtl. noch FOF_SILENT oder FOF_SIMPLEPROGRESS foCopy.fAnyOperationsAborted = FALSE; // dieser Parameter ist mir nicht ganz klar foCopy.hNameMappings = NULL; foCpoy.lpszProgressTitle = NULL; // Wenn du FOF_SIMPLEPROGRESS verwendest, hier den Titel für die Dialog-Box angeben if(SHFileOperation(&foCopy) == 0) { // Vorgang war erfolgreich } else { // es gab einen Fehler }Und nicht vergessen shell32.lib zu linken

edit: if-Syntax (Klammer zuviel) korrigiert
-
Wenn alles nix taugt, kuck nochmal hier:
http://www.cpp-programming.de/quellcodes/viewcode.php?id=007
-
Besten Dank!!
@ Canon
Auf diese Weise kann ich nur eine Datei kopieren, ich möchte aber ein ganzes Verzeichnis@flenders
sowas ähnliches habe ich gestern auch schon gefunden, z.b hier
http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc01005.phpAber ich habe nicht eines davon zum laufen (compiliert) gebracht.
Die Datei müsste ich jetzt eingebunden haben, allerdings meldet er mir ein paar fehler:
#include <shellapi.h>
SHFILEOPSTRUCT foCopy;//foCopy.hwnd = hWnd; // Handle deines Hauptfensters
foCopy.wFunc = FO_COPY;
foCopy.pFrom = "c:\\archiv\*.dbx\0";
foCopy.pTo = "c:\\windows\\Mails\0";
foCopy.fFlags = FOF_FILESONLY | FOF_NOCONFIRMATION; // evtl. noch FOF_SILENT oder FOF_SIMPLEPROGRESS
foCopy.fAnyOperationsAborted = FALSE; // dieser Parameter ist mir nicht ganz klar
foCopy.hNameMappings = NULL;
//foCpoy.lpszProgressTitle = NULL; // Wenn du FOF_SIMPLEPROGRESS verwendest, hier den Titel für die Dialog-Box angeben//if(SHFileOperation(&foCopy) == 0)) {
// Vorgang war erfolgreich
//}
//else {
// es gab einen Fehler
}Erst nachdem ich das ausgeklammert habe konnte ich erfolgreich kompilieren.
Aber leider tut das prog dann anschließend nichts.
Kann jetzt leider nicht weiter testen, aber vielleicht heute abend wieder.
-
Unterordner wirst du auf diese weise aber vermutlich nicht
mit kopieren können, oder irre ich ?Irrlicht
-
Unterordner sind für mich jetzt nicht wichtig, aber sicherlich nicht uninteressant.
-
Farnsworth schrieb:
Die Datei müsste ich jetzt eingebunden haben, allerdings meldet er mir ein paar fehler:
Welche Fehler meldet er denn? Das solltest Du etwas konkreter angeben...
-
Hi, sorry!
Fehler beim Editieren!Er meldet c++ Fehler OEX.cpp(36); E2451 Undefiniertes Symbol hWnd
Wenn ich aber bei SHFILEOPSTRUCT in der Hilfe nachsehe, ist der Befehl aber vorhanden.
Ausserdem ist die Zeile doch nicht erforderlich, genau wie die anderen die ich ausgeklammert habe, ohne die müsste es doch auch gehen.
-
#include <shellapi.h> SHFILEOPSTRUCT foCopy; foCopy.hwnd = hWnd; // Handle deines Hauptfensters foCopy.wFunc = FO_COPY; foCopy.pFrom = "c:\\archiv\\*.dbx\0"; foCopy.pTo = "c:\\windows\\Mails\0"; foCopy.fFlags = FOF_FILESONLY | FOF_NOCONFIRMATION | FOF_SILENT; foCopy.fAnyOperationsAborted = FALSE; // dieser Parameter ist mir nicht ganz klar foCopy.hNameMappings = NULL; foCpoy.lpszProgressTitle = NULL; // Wenn du FOF_SIMPLEPROGRESS verwendest, hier den Titel für die Dialog-Box angeben if(SHFileOperation(&foCopy) == 0)) { // Vorgang war erfolgreich } else { // es gab einen Fehler }Farnsworth schrieb:
Erst nachdem ich das ausgeklammert habe konnte ich erfolgreich kompilieren.
Aber leider tut das prog dann anschließend nichts.
Kann jetzt leider nicht weiter testen, aber vielleicht heute abend wieder.Natürlich tut das Programm nichts, denn die wichtigste Zeile hast Du ja auskommentiert!
if(SHFileOperation(&foCopy) == 0)) { // Vorgang war erfolgreich } else { // es gab einen Fehler }SHFileOperation ist doch die Funktion, die letztendlich das tut, was Du ihr mit Hilfe der SHFILEOPSTRUCT aufträgst!
Farnsworth schrieb:
Wenn ich aber bei SHFILEOPSTRUCT in der Hilfe nachsehe, ist der Befehl aber vorhanden.
Logisch, er meckert ja nicht über foCopy.hwnd sondern über hWnd, und wenn Du Dein Fensterhandle (sofern Du eins hast) in einer anderen Variable gespeichert hast und hWnd generell unbekannt ist, meckert er halt.
-
Hm, ich dachte der macht das sofort wenn ich das aufrufe.
bei der If Anweisung bekomme ich E2188 Ausdruckssyntax
und in Zeile E2379 In Anweisung fehlt
er markiert dabei eine Klammer
-
if(SHFileOperation(&foCopy) == 0))Da fehlt ja auch ne Klammer...
Zweimal Klammer öffnen, dreimal Klammer schließen... da fehlt was.
-
Puh!
Schwere Geburt!!
Das hat endlich geklappt!!
besten Dank!!
-
ohh übersehen:
FOF_FILESONLY
weglassen, dann klappt es auch mit den Unterordnern

-
Hab jetzt auch ein kleines Problem.
Und zwar wenn ich die Pfade in CStrings angebe:SHFILEOPSTRUCT foCopy; returnstring+="\\*.*\0"; //c:\\test wird jetzt c:\\test\\*.* m_psi1+="\0"; //c:\\testzwei MessageBox(returnstring,m_psi1); //Kontrolle, wird auch richtig angezeigt ! foCopy.hwnd = NULL; foCopy.wFunc = FO_COPY; foCopy.pFrom = returnstring; //ist hier der wurm drin ? foCopy.pTo = m_psi1; foCopy.fFlags = FOF_NOCONFIRMATION; foCopy.fAnyOperationsAborted = FALSE; foCopy.hNameMappings = NULL; foCopy.lpszProgressTitle = NULL;Die Pfade werden zwar offensichtlich richtig übernommen, aber
ich erhalte immer den Fehler: Quelldatei kann nicht gelesen werden.
-
Scheint mit Variablen wohl nicht zu gehen ?
Wenn ich den Pfad direkt reinschreibe:foCopy.pFrom = "c:\\test\\*.*\0"; //returnstring; foCopy.pTo = m_psi1;Dann geht es
Wie gemein 
-
returnstring.c_str()

-
Was meinst du

Ich muss den CString returnstring wohl irgendwie
noch neu formatieren ?! damit er in der Copyoperation
verwendet werden kann ??
-
Genau, so ungefähr

foCopy.pFrom = returnstring.c_str();