Forum: PC-Programmierung Warum Dateinamen max 255 byte lang?


von datenqualle (Gast)


Lesenswert?

Hallo,

warum ist bei allen Dateisystemen (optische Formate mal ausgelassen wie 
ISO9660,...) die maximale Dateinamenlänge 255 byte?
Siehe z.B. hier: http://wiki.ubuntuusers.de/Dateisystem

von TestX .. (xaos)


Lesenswert?

255 Zeichen != 255 Byte ;)
Das mit den 255 Zeichen ist historisch entstanden und eine feste größe 
vereinfacht das handling mit den inodes etc..

von (prx) A. K. (prx)


Lesenswert?

Was hat das mit den inodes zu tun?

von datenqualle (Gast)


Lesenswert?

Andi ... schrieb:
> Das mit den 255 Zeichen ist historisch entstanden und eine feste größe
> vereinfacht das handling mit den inodes etc..
Nicht jedes FS nutzt inodes.

von (prx) A. K. (prx)


Lesenswert?

Andi ... schrieb:
> 255 Zeichen != 255 Byte ;)

Stimmt. 3 Zeichen in 2 Bytes gabs im Filesystem auch schon.

von A.H. (Gast)


Lesenswert?

Heute ist eher sowas wie UTF-8 Encoding für byte != Zeichen relevant.

von A.H. (Gast)


Lesenswert?

Andi ... schrieb:
> vereinfacht das handling mit den inodes etc..

Die Dateinamen werden nicht im Inode gespeichert. Ansonsten wäre das mit 
den Hardlinks schwierig zu implementieren. Wenn das Filesystem überhaupt 
Inodes verwendet.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von oszi40 (Gast)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Jörg Wunsch schrieb:
> Bei den üblichen Unixen schon.  Die maximale Pfadlänge wurde/wird
> dann typisch auf 1023 Zeichen begrenzt.

Unter Linux sind es derzeit 4096 Bytes. Das reicht immerhin für 16
Verzeichnisebenen mit der maximalen Dateinamenlänge, stellt also keine
allzu große Einschränkung dar.

: Bearbeitet durch Moderator
von Georg (Gast)


Lesenswert?

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

von bob (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von oszi40 (Gast)


Lesenswert?

Yalu X. schrieb:
> Unter Linux sind es derzeit 4096 Bytes. Das reicht immerhin für

Dann verbinde mal einen W7-PC mit diesem Netzlaufwerk-Ordner und 
berichte uns was z.B.  dir /s so Schönes anzeigt bei dieser Länge. :-)

von Udo S. (urschmitt)


Lesenswert?

Es gab auch schon Dateisysteme mit fixen 8 oder 8.3 Dateinamenlängen :-)

von (prx) A. K. (prx)


Lesenswert?

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.

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Georg schrieb:
> Genau das ist doch ein String mit Längenangabe, wie in Pascal - was soll
> also die Meckerei?

Es hat eben nur nichts mit Programmiersprachen zu tun.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.