Dateien von A nach B kopieren



  • Hallo Cracks!
    Ich "arbeite" mit dem BCB 5
    Dumme Frage:
    Wie kann ich Dateien aus einem Ordner in einen anderen kopieren oder verschieben?
    Habe aus den FAQs das probiert:

    #include <fstream.h>
    ...
    ...
    ...
    using namespace std; 
    ifstream FileInCopy("c:\\MeineDatei.jpg", ios::binary); 
    ofstream FileOutCopy("c:\\MeinOrdner\\MeineDatei.jpg", ios::binary); 
    
    if (FileInCopy) 
        FileOutCopy << FileInCopy.rdbuf();
    

    Das funktioniert aber nur solange ich den Dateinamen in " " eingebe.
    Wenn ich aber AnsiStrings benutze wie hier:

    #include <fstream.h>
    ...
    ...
    ...
    AnsiString quelle="C:\\MeineDatei.jpg";
    AnsiString ziel="C:\\MeinOrdner\\MeineDatei.jpg";
    using namespace std;
    ifstream FileInCopy(quelle, ios::binary);
    ofstream FileOutCopy(ziel, ios::binary);
    if (FileInCopy)
        FileOutCopy << FileInCopy.rdbuf();
    

    bekomme ich folgende Compiler-Fehlermeldung:

    [C++ Fehler] Unit1.cpp(61): E2285 Keine Übereinstimmung für 'ifstream::basic_ifstream(AnsiString,ios_base::open_mode)' gefunden
    [C++ Fehler] Unit1.cpp(63): E2285 Keine Übereinstimmung für 'ofstream::basic_ofstream(AnsiString,ios_base::open_mode)' gefunden

    Was mache ich falsch?
    Hoffe die Frage ist nicht zu dumm...
    Danke im Voraus

    WerdNochWahnsinnig



  • Hallo

    siehe AnsiString::c_str(). Das liegt daran, das AnsiString und std::string zwei verschiedene Klassen sind.

    Warum nimmst du aber nicht gleich CopyFile() ? Steht nicht in der BCB-Hilfe, sondern im Windows SDK.

    bis bald
    akari



  • Hallo akari
    Danke für die schnelle Antwort!

    Aber in der Fehlermeldung verlangt er doch nach AnsiString.

    Ok, werde die Sache mit c_str() mal probieren...

    CopyFile() ?
    Habe in der BCB Hilfe danach gesucht aber nix gefunden...

    Danke für die Hilfe!

    WerdNochWahnsinnig



  • zu 1)
    Nein. Er verlangt nicht nach AnsiString, sondern weist dich darauf hin, das es die Methode nicht mit AnsiString gibt.

    zu 2)
    Wie erwähnt steht das nicht in der BCB-Hilfe, sondern in der WinAPI-Hilfe



  • Hallo

    also noch mal genau. iofstream arbeitet wie alle anderen std-Sachen mit std::string. Du benutzt aber AnsiString, eine Builder-eigene Klasse aus der VCL.
    Ist aber kein Problem, da du das mit der Methode ::c_str() hin- und herkonvertieren kannst (ums mal einfach auszudrücken). Also

    AnsiString quelle="C:\\MeineDatei.jpg";
    AnsiString ziel="C:\\MeinOrdner\\MeineDatei.jpg";
    using namespace std;
    ifstream FileInCopy(quelle.c_str(), ios::binary); // Einfach erweitern
    ofstream FileOutCopy(ziel.c_str(), ios::binary); // Einfach erweitern
    

    Aber CopyFile ist wirklich eine Alternative.

    if (CopyFile(quelle.c_str(), ziel.c_str(), true) == 0)
    {
      // Fehler
      }
    

    bis bald
    akari



  • Hast ja recht...
    Habe verstanden...
    Ich war ein bisschen überfordert...
    Ich melde mich wieder, wenn ich geschnallt habe wie ich WinAPI in C++ aufrufe... 🙂
    Danke akari
    WerdNochWahnsinnig



  • Habs geschafft:

    #include <fstream.h>
    ...
    ...
    ...
    using namespace std;
    AnsiString quelle="C:\\MeineDatei.jpg";
    AnsiString ziel="C:\\MeinOrdner\\MeineDatei.jpg";
    ifstream FileInCopy(quelle.c_str(), ios::binary);
    ofstream FileOutCopy(ziel.c_str(), ios::binary);
    if (FileInCopy)
        FileOutCopy << FileInCopy.rdbuf();
    

    Danke, nochmal !!!
    (Mann, wie peinlich...) 🙂

    WerdNochWahnsinnig



  • Trotzdem verstehe ich nicht, warum du da das Rad neu erfindest?

    Wenn du die kopierte Datei noch ergänzen willst OK, aber warum willst du unbedingt einen Siebenzeiler verwenden, wenn du dass ganze viel eleganter in einen Einzeiler packen kannst?



  • Hallo again...
    Die Variante mit CopyFile() ist eleganter, keine Frage !
    Mein Problem war, dass ich mir nicht vorstellen konnte, dass es so eine
    Funktion nicht schon fertig gibt, aber in der BCB-Hilfe konnte ich nichts finden.
    Jetzt klappt es aber auch mit CopyFile()

    Hey, Du hast mir echt auf die Sprünge geholfen !
    Danke akari

    WerdNochWahnsinnig



  • Danke an Alle, übrigens !!!


Anmelden zum Antworten