Dateien / Verzeichnisse kopieren
-
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();
-
Hi flenders,
habe ich soeben probiert. Das Ergebnis ist folgende Fehlermeldung:
error C2039: 'c_str': Ist kein Element von 'ATL::CStringT<BaseType,StringTraits>'
with
[
BaseType=char,
StringTraits=StrTraitMFC<char>
]Muss ich noch irgendwas spezielles includen, oder gehts einfach
nicht weil es ein CString ist ? Ich verstehe die Fehlermeldung leider
nicht wirklich
-
-
Hmm, ich habs mal damit versucht bekomme aber wieder
das Feld mit "Quelldatei kann nicht kopiert werden".
Keine Fehler im Compiler, Pfad wird in MessageBox auch
richtig angezeigt.Kannst du mir mal ein Beispiel geben, wie ich den
CString returnstring; so aufbereite, dass ihnfoCopy.pFrom = "c:\\test123\*.*";//returnstring;
annimmt und korrekt verarbeitet ? Ich habe keine Idee
wo jetzt noch der Fehler sein kann. Das Quellverzeichnis
existiert natürlich inkl. Unterordner und Files.
-
Nachtrag:
in der Zeile:
foCopy.pTo = m_psi1; //ebenfalls ein CStringklappt alles einwandfrei, aber nur wenn ich .pFrom
direkt, ohne Variable angebe.
-
Evtl. solltest du sowas mal im MFC-Forum fragen

-
Ok, werde ich machen und dann auf dieses Thema verweisen.
Vielen Dank für deine Hilfe bis hierher
-

Hallo Jungs,wenn ich die Funktion SHFileOperation verwende, bekomme ich folgende
Fehlermeldung:error LNK2001: unresolved external symbol __imp__SHFileOperationW@4
Ich habe auch den Header und das lib file eingebunden:
#pragma comment (lib, "shell32.lib")
#include <shellapi.h>
Die Datei ist ein c file und nicht ein cpp file.
Ich habe schon versucht den Code in einer cpp Datei zu kompilieren, aber
da werden einige C-Funktionen trotz das Schlüsselwort extern "C" nicht erkannt!Danke
