Datei kopieren



  • templäd schrieb:

    der String muss du musst "\" durch "\" in deinen Strings ersetzen.
    "\t" z.B. ist ein TAB

    Das scheint das Board ebenso zu sehen 😉
    Solange man es bearbeitet wird's aber in der Vorschau richtig dargestellt.

    Für alle Fälle:
    "der String muss du musst "\" durch "\\\" in deinen Strings ersetzen."

    Egal, mit wievielen \\ das Board das schreibt, es bleibt richtig ;->

    Edit: Gna... Soviel zur Theorie, aber wenn man auf 'Zitieren' drückt, sieht man, was geschrieben wurde...

    Jeder "Backslash" muss in einem String durch zwei Backslashs dargestellt werden, da der Backslash andere Zeichen wie Anführungszeichen oder 0 maskiert.
    Damit in Deinem Pfad ein Backslash (das Zeichen nach "C:") enthalten ist, musst Du also zwei reinschreiebn.



  • Danke!

    Er kopiert mir jetzt zwar das File, allerdings nur wenn ich einen Dateinamen für die destination angebe:

    CopyFile("c:\\kopier.txt", "C:\\backup\\kopierendurchgefuehrt.txt",true)
    

    Was muss ich machen damit er meinen Dateinamen einfach beibehält und die Datei einfach nur in einen anderen Ordner kopiert. In etwa so:

    CopyFile("c:\\kopier.txt", "C:\\backup\\",true)
    

    hatte ich mir das gedacht, hat aber leider nicht funktioniert!



  • Hallo

    😕

    CopyFile("c:\\kopier.txt", "C:\\backup\\kopier.txt",true)
    

    bis bald
    akari



  • Ja, aber auch da muss ich einen Namen für das File angeben, und ich will ja dass ganze später mit Variablen ersetzen um mehrere Dateien somit zu kopieren. Geht es nicht, dass er automatisch den Filenamen behält ohne dass ich ihn im Ziel angebe?



  • Hallo

    wo ist das Problem? Du hängst eben die Variable mit dem Dateinamen nicht nur an das Quellverzeichnis, sondern auch an das Zielverzeichnis.

    bis bald
    akari



  • Aeris1 schrieb:

    Ja, aber auch da muss ich einen Namen für das File angeben, und ich will ja dass ganze später mit Variablen ersetzen um mehrere Dateien somit zu kopieren. Geht es nicht, dass er automatisch den Filenamen behält ohne dass ich ihn im Ziel angebe?

    Ich weiß nicht, wie die Funktion auf Verzeichnisse als Ziel reagiert.

    Aber das Problem lässt sich relativ einfach mit sprintf() lösen. Schau Dir die Funktion halt mal an, funktioniert quasi wie printf, schreibt die Daten aber in einen Buffer, den Du dann an CopyFile übergeben kannst.
    Lediglich aufpassen, dass die Buffergröße stimmt, sonst *BOOM* ^^



  • CopyFile (aus WinAPI) benötigt bei beiden Parametern einen Filenamen. Statt sprintf geht hier auch strcpy + strcat oder man nimmt gleich string.
    Falls man mehr Funktionalität benötigt (Directories kopieren, Files mit Wildcards usw.) kann man auch SHFileOperation verwenden.
    Fragen dazu gehören aber eher in das WinAPI-Forum.
    Für reines C++ gibt es da noch boost::filesystem::copy_file().



  • OK danke erstmal für die Beiträge.

    Jetzt hab ich meinen Dateipfad in einem Character und meinen Dateinamen in einem anderen.

    Wie setze ich die beiden wieder zusammen, ich hab sowas leider noch nicht gemacht und mit einem konventionellen + gibt er sich nicht zufrieden.

    char *destination = new char [50];
            char * Ziel = new char [50];
            //Dateipfad auslesen
            char *str = "C:\\Quelle\\kopieren.txt";
            // Erste Position von \ (von rechts gesehen) holen
            char *tmp = strrchr(str, '\\');
            if(tmp!=NULL)
            {
                    tmp++; // auf das nächste Zeichen hinter \ posit.
            }
            destination = "C:\\backup\\" ;
    

    Also noch mal genau meine Frage: Wie setze ich meine Variablen destination und tmp zusammen zu einem dateipfad?

    sowas wie

    destination = destination + tmp
    

    nimmt er leider nicht.



  • In C++ geht's auch mit + 😉

    string destination;
    //Dateipfad auslesen
    string str = "C:\\Quelle\\kopieren.txt";
    // Erste Position von \ (von rechts gesehen) holen
    string::size_type pos = str.rfind('\\');
    if (pos != string::npos)
        ++pos;
    else
        pos = 0;
    destination = "C:\\backup\\" + str.substr(pos);
    

    Zum Beispiel so.



  • Wie oben schon gesagt hilft dir da strcat.
    Mach das Ganze aber lieber mit std::string. Da kannst du mit + verketten.

    string path = "C:\\";
    string back = path + "backup\\";
    string file = "Test.txt";
    string src = path + file;
    string dest = back + file;
    CopyFile(src.c_str(), dest.c_str(), true); // c_str() liefert const char* was CopyFile benötigt
    

    Das ist hier etwas umständlicher als nötig aber ich denke so besser zu verstehen.
    [edit]Da habe ich wohl zu lange gebraucht. 🙂 [edit]



  • Danke an alle 👍 , hat sehr gut funktioniert! 🙂


Anmelden zum Antworten