Hallo,
schau Dir mal die folgende Zeile genau an:
rename(ordnerPfad + „\Neu Textdokument.txt“ , „C:\Testordner\Neuer Name.txt“);
Deklaration von rename:
int rename(const char *oldpath, const char *newpath);
D.h. Du musst zwei Argumente von Typ const char* übergeben.
Das zweite Argumen ist schon von dem Typ, da ist nichts weiter zu tun.
Das erste Argument ist:
ordnerPfad + „\Neu Textdokument.txt“
Ein Operator
string operator+(string, const char*)
existiert nicht, aber einer
string operator+(string, string)
Daher wird eine automatische Konvertierung
string::string(const char*)
durchgeführt:
string + const char* -> string + string
Der Typ davon ist nun ein string
string + const char* -> string
Gebraucht wird ein Typ const char*, eine automatische Konvertierung von Typ string in const char* existiert nicht. Daher muss die Konvertierung manuell durchgeführt werden mit der Funktion
const char* string::c_str()
und zwar vom Ergebnis des ±Operators:
(ordnerPfad + „\Neu Textdokument.txt“).c_str()
Übrigens: ein orderPfad.c_str() + „\Neu Textdokument.txt“ gibt vom Typ das folgende:
const char* + const char*
also die Addition von zwei Zeigern. Wenn der Compiler sich nicht beschwert, dann wird ein Zeiger in ein int umgewandelt, also
const char* + int
und damit zeigst Du irgendwo in den Speicherbereich -> Speicherzugriffsfehler.
Viele Grüße
Diether