Problem beim Anlegen einer Datei mit ofstream::open und langem Dateinamen



  • Hallo zusammen,

    ich hab folgendes Problem festgestellt. In meinem Programm muss eine Datei in einem Benutzer-definierten Verzeichnis angeleget werden. Dies geschieht bei mir zur Zeit so:

    std::ofstream file;
    file.open(<Pfad>/<Dateiname>);
    /*
      ...
    /*
    file.close();
    

    Wählt der Benutzer ein Verzeichnis mit sehr langem Pfad, scheitert die open function.
    Meine Tests haben gezeigt, dass die Grenze für das erfolgreiche Anlegen einer Datei 259 Zeichen sind, unabhängig davon wieviel von den Zeichen zum Pfad und wieviel zum Dateinamen gehören.

    Gleiches Problem besteht bei der rename() Funktion aus stdio.h und vermutlich auch bei allen anderen Funktionen bzgl. Datei-Verarbeitung.

    Meine Fragen:
    1. Wieso ausgerechnet 259? 256 wäre mir ja noch irgendwie plausibel gewesen...
    2. Wie kann ich das Problem beheben/umgehen?

    Danke für eure Hilfe
    Gruß
    mvp



  • Hi,

    ich tippe auf eine Betriebssystembeschränkung.
    Falls Windows: strlen("c:\") + 256 = 259...

    EDIT: 😡 😡 Aaaargh: Wo ist mein einfacher backslash, wenn ich absende ? Bei der Vorschau ist er da ! ...

    Gruß,

    Simon2.



  • Das würde meine erste Frage erklären, Danke!
    Bleibt die Frage, wie ich das umgehen kann...

    Gruß,
    mvp



  • Hi!

    Also NTFS kann eigentlich ca. 32.000 Zeichen. Unter folgendem Link findest du dazu Infos:
    http://msdn2.microsoft.com/en-us/library/aa365247.aspx
    Guck dir außerdem mal die API-Funktion CreateFile an. In der Unicode-Version kannst du "32,767 wide characters" verwenden, in der ANSI-Version ist die Funktion auf MAX_PATH beschränkt.

    Greetz



  • Das war ja schonmal interessant. Leider kann man solche Dateien, die mit einer Unicode-Funktion angelegt wurden, im Windows-Explorer nicht mehr löschen, öffnen oder sonst etwas. Löschen geht nur mit der entsprechenden Unicode-Version der remove Funktion (_wremove). Ist mir zu umständlich, ich werds bei ner Fehlermeldung für den Benutzer belassen.

    Vielen Dank für die Hinweise.
    mvp


Log in to reply