datei umbenennen



  • Hallo

    ich möchte files umbenennen mit _trename

    der pfad der datei steht in tstring path zum beispiel: "C:\Tools\"

    aber dann möchte ich die datei "test.txt" in "__test.txt" in tools umbenennen.

    ich möchte nicht so vorgehen

    _trename("C:\\Tools\\test.txt", "C:\\Tools\\__test.txt");
    

    weil wenn sich der pfad zur datei ändert, möchte ich nicht den pfad bei jedem aufruf von _trename ändern, sondern nur einmal in einer variable. wie kann ich das machen, dass ich den pfad in eine variable schreibe und dann die zu verändernte datei noch dazu schreibe?



  • Naja, du hasts in MFC gepostet, also löse ich es so:

    CString path, name, new_name;
    path = "C:\\dir\\";
    name = "test.txt";
    new_name = "__test.txt";
    _trename(path+name,path+new_name);
    

    MfG brot



  • danke für die antwort.
    da hätte ich eigentlich auch selbst drauf kommen können. hab es auch so ähnlich gemacht.
    aber nun kommt folgende Fehlermeldung

    error C2664: 'rename' : Konvertierung des Parameters 1 von 'class _STL::basic_string<char,struct std::char_traits<char>,class _STL::allocator<char> >' in 'const char *'
    nicht moeglich
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden



  • du kriegst als rückgabe der addition ein basic_string, erwartet wird const char*.
    sollte afaik mit basic_string::c_str zu lösen sein.
    alternativ etwas wie

    CString cmd1, cmd2;
    cmd1 = path+name;
    cmd2 = path+new_name;
    _trename(cmd1.GetBuffer(),cmd2.GetBuffer());
    


  • bei mir ist path ein tstring und kein CString. macht das einen unterschied?

    wenn ich es so mache wie beschrieben (ohne GetBuffer() ) dann kommen die gleichen Fehlermeldungen. Und mit GetBuffer() kommt dann, kein Element von...

    sorry wenn ich mich vielleicht etwas blöd anstelle, aber ich bin noch nicht wirklich so erfahren in c++



  • in dem fall falsches forum.
    was ist tstring? eine klasse? mit was arbeitest du?



  • oh, tut mir leid, wenn es das falsche forum ist.

    wenn ich mit dem mauszeiger drauf gehe kommt als beschreibung:
    typedef std::basic_string<TCHAR> tstring



  • dann solltest dus mit

    _trename(cmd1.c_str(),cmd2.c_str());
    

    lösen können.



  • thx, jetzt hat alles geklappt

    vielen dank für deine geduld

    aber cmd1 und cmd2 müssen auch als tstring deklariert sein, nicht als CString



  • jop, davon gieng ich aus ;).
    np btw


Anmelden zum Antworten