String in *char umwandeln



  • Hallo zusammen,

    ich bin gerade dabei ein kleines Windows-Programm zu schreiben bei dem ua. Dateien umbenannt werden.
    Mittels openfileDialog lese ich den Dateipfad sowie den Dateinamen ein. anschließend wir der Pfad in einen C++-Pfad mit doppeltem \\ umgewandelt.
    In einer weiteren Funktion möchte ich die Datei mittels "rename" umbenennen. Dazu benötige ich den alten sowie den neuen Pfad als *char Variable. Die Funktion erhält die Variablen jedoch als String^.

    void Datei_umbenennen()
    {
            char *alterpfad;
            char *neuerpfad;
    //hier wird der neue dateiname gebildet
    	dateiendung = dateiname->Substring(dateiname->Length - 4);
    	neuername = dateipfad->Replace(dateiname, ergebnis_gesamt) + dateiendung;
    
    // String Variablen "altername" und "neuername"
    
    	int result = rename(alterpfad, neuerpfad);
    
    	if (result == 0) textBox_Dateiname->Text = "Datei-Benennung erfolgreich!";
    	else
    	{
    		Kopie_Zwischenablage();
    		textBox_Dateiname->Text = "Benennung fehlgeschlagen, neuer Dateiname in Zwischenablage";
    	}
    }
    

    Die Bildung des neuen Dateinamen funktioniert, ebenso das umbenennen, wenn ich als char * Variable den Pfad im Programmcode eintippe. Nur das umwandlen der Strings neuername und altername in die Pointer auf char alterpfad und neuerpfad bekomme ich einfach nicht hin. Ich habe bereits mehrere Ansätze verfolgt. Da keiner erfolgreich war habe ich nur eine Kommentar an der Position in der Funktion hinterlassen.
    Die Variablenbenennung ist durch das viele probieren aktuell leider etwas undurchsichtig.
    Ich hoffe Ihr könnt mir weiterhelfen.
    Ich arbeite mit visual Studio 2015.



  • Da Du ja sowieso mit .NET unterwegs bist (wegen C++/CLI), schlage ich vor, dass Du auch die .NET Funktion zum Umbenennen der Dateien benutzt: https://msdn.microsoft.com/en-us/library/system.io.file.move.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1

    Dann entfällt auch das lästige Konvertieren zu char* .

    Sei noch erwähnt, dass C++/CLI nur für Interop-Projekte zwischen .NET und managed Code geeignet ist. Genau darum ist es aber auch schwierig zu benutzen (viele Fallstricke, viel Wissen vorausgesetzt). Deshalb empfehle ich entweder ganz C++, C# oder Java zu benutzen.

    Siehe auch: https://www.c-plusplus.net/forum/263084

    Edit:
    Hier noch Hilfe aus der FAQ zu deinem ganz konkretem Problem:
    https://www.c-plusplus.net/forum/158664
    https://www.c-plusplus.net/forum/158666



  • theta schrieb:

    Da Du ja sowieso mit .NET unterwegs bist (wegen C++/CLI), schlage ich vor, dass Du auch die .NET Funktion zum Umbenennen der Dateien benutzt: https://msdn.microsoft.com/en-us/library/system.io.file.move.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1

    Dann entfällt auch das lästige Konvertieren zu char* .

    Sei noch erwähnt, dass C++/CLI nur für Interop-Projekte zwischen .NET und managed Code geeignet ist. Genau darum ist es aber auch schwierig zu benutzen (viele Fallstricke, viel Wissen vorausgesetzt). Deshalb empfehle ich entweder ganz C++, C# oder Java zu benutzen.

    Siehe auch: https://www.c-plusplus.net/forum/263084

    Edit:
    Hier noch Hilfe aus der FAQ zu deinem ganz konkretem Problem:
    https://www.c-plusplus.net/forum/158664
    https://www.c-plusplus.net/forum/158666

    Das hört sich nach dem wesentlich besseren Weg an.
    Die Move-Funktion rufe ich in einer Funktion folgendermaßen auf:

    Move(alterpfad, neuerpfad);
    

    Außerhalb der Funktion deklariere ich die Move-Funktion so:

    static void CppCLR_WinformsProjekt::Form1::Move(String ^ sourceFileName, String ^ destFileName)
    	{
    		throw gcnew System::NotImplementedException();
    

    leider bekomme ich beim ausführen der Move-Funktion den Fehler:
    NotImplementedException

    woran kann das liegen? habe ich die Move-Funktion nicht richtig implementiert? fehlt eine Bilbiothek? Ich habe das gefühl ich stehe auf dem Schaluch...



  • 🙄



  • theta schrieb:

    🙄

    es funktioniert...ich bedanke mich 🙂