probleme beim verwenden von std::rename()



  • moin schreibe gerade ein kleines prog was daten und ordner umbennen bzw. verschieben soll und das funktioniert soweit auch ganz gut. jedoch möchte ich jetzt die std::rename() funktion verwenden jodoch bekomme ich keine vernünftige typenumwandlung hin ...

    std::rename(strFileList[nI]->ToString(),String::Join(S"",strBuffer)->ToString());
    

    bekomme immer die folgende Fehlermeldung:

    c:\Dokumente und Einstellungen\Klopfer\Eigene Dateien\Visual Studio Projects\rename\Form1.cpp(137): error C2664: 'rename': Konvertierung des Parameters 1 von '__wchar_t __gc[]' in 'const char *' nicht möglich



  • Da du ja offenbar C++.NET benutzt, wäre die statische Methode Move von System.IO.File wohl passender.



  • hm ja die benutze ich ja bis jetzt aber ich hab mir gedacht das wenn ich die datei nicht verschiebe es einfacher ist auf eine rename methode umzusteigen.



  • also ich find das ziemlich dumm den move befehl zu nutzen wenn ich einen ordner einfach nur umbenennen möchte ... gibts da keine andere lösung oder bennent der move befehl den ordner vielleicht auch einfach nur um solange er im selben verzeinis bleibt denn wenn er den kpiert is das ja ziemlich zeitaufwändich und dumm oder?? 🙂



  • Kasimir schrieb:

    also ich find das ziemlich dumm den move befehl zu nutzen wenn ich einen ordner einfach nur umbenennen möchte ... gibts da keine andere lösung oder bennent der move befehl den ordner vielleicht auch einfach nur um solange er im selben verzeinis bleibt denn wenn er den kpiert is das ja ziemlich zeitaufwändich und dumm oder?? 🙂

    static System::Void System::IO::File::Move(System::String __gc *, System::String __gc *);
    

    http://msdn.microsoft.com/
    In der Tabelle "To do this..." steht in der fünften Zeile "Rename or move a file."



  • Das hilft vielleicht, wenn du bei std::rename bleiben willst:

    #include <iostream>
    #using <mscorlib.dll>
    
    using namespace std;
    using namespace System;
    
    int main()
    {
        __wchar_t Message __gc[] = (__gc new String(S"Hallo Welt"))->ToCharArray();
        volatile __wchar_t __pin *Pinned = &(Message[0]);
        wcout << reinterpret_cast<wchar_t __nogc *>(Pinned) << endl;
        return 0;
    }
    

    PS: Mit C++/CLI siehts angenehmer aus 😮



  • Kasimir schrieb:

    denn wenn er den kpiert is das ja ziemlich zeitaufwändich und dumm oder?? 🙂

    Der move-Befehl kopiert sowieso nur, wenn du auf ein anderes Laufwerk verschiebst. Ansonsten geht das ziemlich schnell.



  • thx für die ganzen infos 🙂
    jetzt ist alles um einiges klarer


Anmelden zum Antworten