Warum Dateinamen max 255 byte lang?

Moderator Persönliche Seite
A.H. schrieb:
> Heute ist eher sowas wie UTF-8 Encoding für byte != Zeichen relevant.

Wobei das Limit dann trotzdem eher bei 255 Bytes denn bei 255 Zeichen
liegt.  Damit ist dem OS die Zeichencodierung selbst völlig egal,
es schreibt einfach einen Bytestrom ins jeweilige Verzeichnis.

Dass es ein Limit gibt, hat eher pragmatische Gründe für die
Implementierung.
Gast
Jörg Wunsch schrieb:
> hat eher pragmatische Gründe für die
> Implementierung.

Man sollte aber nicht glauben daß diese 255 Zeichen für EINEN Namen 
gedacht waren. Bei DOS war schon bei 66 Zeichen Schluss und bei MS 
wurden diese 255 ab Wurzel gerechnet. Wer also lange Ordner wie 
c:\1234567890\1234567890\ benutzt, sollte sich besser kurz fassen! Das 
böse Erwachen kommt, wenn das Backup diese Daten nicht sichern konnte.
Moderator Persönliche Seite
oszi40 schrieb:
> Man sollte aber nicht glauben daß diese 255 Zeichen für EINEN Namen
> gedacht waren.

Bei den üblichen Unixen schon.  Die maximale Pfadlänge wurde/wird
dann typisch auf 1023 Zeichen begrenzt.  Praktisch kann man auch noch
tiefer geschachtelte Pfade anlegen, allerdings kann man diese dann
nicht mehr geschlossen (als absoluten Namen) darstellen, sondern nur
noch relativ ansprechen, und damit bekommen dann Backup-Programme
auch schon mal ihre Huddeleien.
Gast
oszi40 schrieb:
> Wer also lange Ordner wie
> c:\1234567890\1234567890\ benutzt, sollte sich besser kurz fassen! Das
> böse Erwachen kommt, wenn das Backup diese Daten nicht sichern konnte.

oder halt aktuelle Software verwenden und nicht dinge aus der Steinzeit.

> The Windows API has many functions that also have Unicode versions to
> permit an extended-length path for a maximum total path length
> of 32,767 characters.
Moderator
datenqualle schrieb:
> warum ist bei allen Dateisystemen (optische Formate mal ausgelassen wie
> ISO9660,...) die maximale Dateinamenlänge 255 byte?

Nicht bei allen, aber bei /vielen/:

  http://en.wikipedia.org/wiki/Comparison_of_file_systems

Es gibt also durchaus etliche Dateisysteme mit kürzeren und sogar einige
mit längeren Dateinamen.

Einer der Gründe, warum die Dateinamenlänge überhaupt begrenzt wird,
liegt darin, dass man dadurch für jeden Namen einen Speicherbereich
fester Größe im Dateisystem reservieren kann. Das erleichtert bspw. das
Umbenennen von Dateien.

Die Größe dieses für jeden Namen reservierten Speicherbereichs ist ein
Kompromiss aus der Möglichkeit, aussagekräftige Namen verwenden zu
können, und dem Speicherverbrauch. Die 255 Bytes haben sich hier eben
als sinnvoll erwiesen.
Moderator
Peter II schrieb:
> oder halt aktuelle Software verwenden und nicht dinge aus der Steinzeit.
>
>> The Windows API has many functions that also have Unicode versions to
>> permit an extended-length path for a maximum total path length
>> of 32,767 characters.

Diese Grenze ist aber eher theoretischer Natur, da die meisten bei
Windows mitgelieferten Tools nach wie vor nur 260 Zeichen unterstützen.
Dazu gehört auch der Explorer als zentrales Dateiverwaltungstool, so
dass man sich nur Schwierigkeiten einhandelt, wenn man mit "modernen"
Programmen Verzeichnisstrukturen mit größerer maximaler Pfadlänge
anlegt.
Gast
Yalu X. schrieb:
> Unter Linux sind es derzeit 4096 Bytes.

Das ist aber hauptsächlich für Linux-Kommandozeilen-Fanatiker von 
Interesse, die immer behaupten, sie würden sowas aus dem Kopf fehlerfrei 
eintippen. In der Praxis sollte man einen Dateinamen auf einem normalen 
Bildschirm auch noch lesen können.

Die Zahl 255 stammt von Programmiersprachen, die Strings mit 
Längenangabe kennen - daher gibt es solche mit 255 und mit 65535 Zeichen 
Länge. Wie Microsoft auf 260 kommt bleibt wohl ein Geheimnis, vielleicht 
wollte man 255 plus ein bisschen Sicherheit. Aber wer weiss schon was MS 
so denkt.

Georg
Gast
Georg schrieb:
> Das ist aber hauptsächlich für Linux-Kommandozeilen-Fanatiker von
> Interesse, die immer behaupten, sie würden sowas aus dem Kopf fehlerfrei
> eintippen. In der Praxis sollte man einen Dateinamen auf einem normalen
> Bildschirm auch noch lesen können.

Deine Annahme steht auf töneren Füssen, ich habe sowas eher bei Usern 
gesehen die alles in den Dateinamen packen, und da ist nicht nur der 
Dateiname lang, auch die Verzeichnisstruktur hat es in sich.


BTW: bei SysVR3 war im Standardfilesystem die Dateinamenslänge maximal 
14 Zeichen.

unter BSD gab es da schon 254 Zeichen pro Dateiname.

Die 1024 Zeichenlimitierung auf so manchem UNIX kommen von fest 
einkompilierten Buffergrössen.
Moderator
Georg schrieb:
> Yalu X. schrieb:
>> Unter Linux sind es derzeit 4096 Bytes.
>
> Das ist aber hauptsächlich für Linux-Kommandozeilen-Fanatiker von
> Interesse, die immer behaupten, sie würden sowas aus dem Kopf fehlerfrei
> eintippen. In der Praxis sollte man einen Dateinamen auf einem normalen
> Bildschirm auch noch lesen können.

Es ging bei dieser Zahl nicht um Datei- sondern Pfadnamen. Und für
Pfadnamen sind die 260 Bytes von Windows (bzw. dessen Tools) mitunter
schon etwas knapp. Man merkt das aber, wie oszi40 oben schon geschrieben
hat, meist erst, wenn das Backupprogramm nicht mehr komplett durchläuft.
Moderator Persönliche Seite
Georg schrieb:
> Die Zahl 255 stammt von Programmiersprachen, die Strings mit
> Längenangabe kennen

Nein, sie stammt vom (BSD) UFS, welches im Verzeichnis statt der
starren 14 Zeichen des alten UNIX-Dateisystems flexibel lange Namen
eingeführt hat, denen jeweils ein Längenbyte vorangestellt worden ist.

Beispiel gefällig?
1
000a7800  09 00 00 00 0c 00 04 01  2e 00 00 00 08 00 00 00  |................|
2
000a7810  0c 00 04 02 2e 2e 00 00  13 07 00 00 14 00 08 0a  |................|
3
000a7820  52 65 70 6f 73 69 74 6f  72 79 00 cc 14 07 00 00  |Repository......|
4
000a7830  10 00 08 04 52 6f 6f 74  00 a8 e3 c1 16 07 00 00  |....Root........|
5
000a7840  c4 01 08 07 45 6e 74 72  69 65 73 00 00 00 00 00  |....Entries.....|
6
000a7850  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

Habe einfach mal auf der Platte gewühlt, scheint ein altes
CVS-Metadatenverzeichnis zu sein.  Man sieht deutlich "01 2e",
der Eintrag für "dot", dann "02 2e 2e" (dot-dot), danach dann
"Repository" mit 10 Zeichen (0a) Länge usw. usf.  Dazwischen die
Zeiger auf die Inodes.
Wenn ein Windows-Server den Pfad
  D:\tree-yyyyyy\share-zzzzz\sehr-langer-filename.txt
per CIFS exportiert, und ein Client darauf als
  X:\sehr-langer-filename.txt
zugreift, dann gelten für den Client die 260 Zeichen für seinen Pfad, 
weshalb der Pfad aus Sicht des Servers länger als 260 Zeichen wird.

Infolgedessen kann der Server mit den üblichen Programmen nicht per 
D:\... darauf zugreifen, nur mit UNC-Pfaden. Was manche Backup-Programme 
deshalb machen.

Auf lokale Files per \\?\... zuzugreifen ist nicht unbedingt intuitiv.
Gast
Jörg Wunsch schrieb:
> flexibel lange Namen
> eingeführt hat, denen jeweils ein Längenbyte vorangestellt worden ist.

Genau das ist doch ein String mit Längenangabe, wie in Pascal - was soll 
also die Meckerei? Für völlig unbedarfte nochmal genau: so ein String 
besteht aus einem Längenbyte (daher die max. 255) und den Zeichen des 
Strings, wobei soviel Platz reserviert ist wie in der Deklaration 
angegeben und soviel davon belegt ist, wie die aktuelle Länge besagt - 
und die steht im Längenbyte. Soll ich eine Zeichnung machen??

Georg

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.