Dateien / Verzeichnisse kopieren



  • 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 ihn

    foCopy.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 CString
    

    klappt 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 🙂



  • Keine Ahnung, aber evtl. geht #pragma comment nur in cpp-Files - hast du mal probiert, die lib über Projekt > Einstellungen > Linker hinzuzufügen?!


Anmelden zum Antworten