Datei kopieren
-
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 + tmpnimmt 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ötigtDas 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! 