Dateinamen per Eingabe ändern

Hallo,

kann mir jemand einen Tipp geben, wie ich dies am besten löse?

Mit Rename() und MoveFile() kann ich es nicht machen, oder?
Zumindest schmeißt er mir immer einen MINGW-Fehler, wenn ich den Dateinamen per Variable übergeben möchte.

Danke schonmal für direkte Hilfe oder Tipps.

Gruß
Tim

Hallo,

Mit Rename() und MoveFile() kann ich es nicht machen, oder?
Zumindest schmeißt er mir immer einen MINGW-Fehler, wenn ich
den Dateinamen per Variable übergeben möchte.

Welchen Fehler denn? Und zeig mal deinen Code.

Gruesse,
Moritz

Welchen Fehler denn? Und zeig mal deinen Code.

Momentan habe ich testweise dies hier:

//Die brauche ich wahrscheinlich alle noch gar nicht.
#include
#include
#include
#include
#include

using namespace std;

int main(int argc, char *argv[])
{
//Deklaration
string ordnerPfad, dateiTyp, dateiName;

//Ordnerpfad angeben
cout > ordnerPfad;

rename(ordnerPfad + „\Neu Textdokument.txt“ , „C:\Testordner\Neuer Name.txt“);

_______________________________________

Fehler ist:
cannot convert ‚std::basic_string, std::allocator >‘ to ‚const char*‘ for argument ‚1‘ to ‚int rename(const char*, const char*)‘

Akzeptiert Rename nur Zeiger?
Kenne mich noch nicht so sehr aus.

Danke.

dann convertier dein string wenn du das so brauchst
http://www.cpp-tutor.de/cpp/le06/le06_02.htm#operati…

Um einen String in einen const char-Zeiger zu konvertieren, enthält die string Klasse die Memberfunktion c_str(…). Mithilfe dieser Konvertierung können Sie also jetzt überall einen String verwenden, wo Sie ansonsten einen const char-Zeiger benötigen. Im Beispiel wird so z.B. der Inhalt eines Strings in ein char-Feld kopiert.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

dann convertier dein string wenn du das so brauchst
http://www.cpp-tutor.de/cpp/le06/le06_02.htm#operati…

Um einen String in einen const char-Zeiger zu konvertieren,
enthält die string Klasse die Memberfunktion c_str(…).
Mithilfe dieser Konvertierung können Sie also jetzt überall
einen String verwenden, wo Sie ansonsten einen const
char-Zeiger benötigen. Im Beispiel wird so z.B. der Inhalt
eines Strings in ein char-Feld kopiert.

Danke, das hilft mir schonmal.
Aber dann kann ich ja keinen ±Operator mehr benutzen, um den Rest daran zu hängen.
Wie mache ich das dann am besten?

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

Hallo,

[…]

Viele Grüße
Diether

Danke!
Das hat mir sehr geholfen!

Ich komme langsam weiter. :wink: