Halten wir es einfach und beantworten zuerst die Frage.
-
Die verbotenen druckbaren ASCII-Zeichen sind:
-
Linux/Unix:
/ (forward slash)
-
Windows:
< (less than) > (greater than) : (colon - sometimes works, but is actually NTFS Alternate Data Streams) " (double quote) / (forward slash) \ (backslash) | (vertical bar or pipe) ? (question mark) * (asterisk)
-
-
Nicht druckbare Zeichen
Wenn Ihre Daten aus einer Quelle stammen, die nicht druckbare Zeichen zulassen würde, müssen Sie nach mehr suchen.
-
Linux/Unix:
0 (NULL byte)
-
Windows:
0-31 (ASCII control characters)
Hinweis: Während es unter Linux/Unix-Dateisystemen legal ist, Dateien mit Steuerzeichen im Dateinamen zu erstellen, könnte es für die Benutzer ein Albtraum sein, mit solchen Dateien umzugehen.
-
-
Reservierte Dateinamen
Folgende Dateinamen sind reserviert:
-
Windows:
CON, PRN, AUX, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
(sowohl alleine als auch mit beliebigen Dateiendungen, z.B.
LPT1.txt
).
-
-
Andere Regeln
-
Windows:
Dateinamen dürfen nicht mit einem Leerzeichen oder Punkt enden.
-
Eine „umfassende Anleitung“ für verbotene Dateinamenzeichen wird unter Windows nicht funktionieren, da sie sowohl Dateinamen als auch Zeichen reserviert. Ja, Zeichen wie *
"
?
und andere sind verboten, aber es gibt eine unendliche Anzahl von Namen, die nur aus gültigen Zeichen bestehen, die verboten sind. Beispielsweise sind Leerzeichen und Punkte gültige Dateinamenzeichen, aber Namen, die nur aus diesen Zeichen bestehen, sind verboten.
Windows unterscheidet nicht zwischen Groß- und Kleinschreibung, daher können Sie keinen Ordner mit dem Namen A
erstellen wenn man a
nennt ist bereits vorhanden. Schlimmere, scheinbar erlaubte Namen wie PRN
und CON
, und viele andere, sind reserviert und nicht erlaubt. Windows hat auch mehrere Längenbeschränkungen; Ein in einem Ordner gültiger Dateiname kann ungültig werden, wenn er in einen anderen Ordner verschoben wird. Die Regeln zum Benennen von Dateien und Ordnern finden Sie in der Microsoft-Dokumentation.
Im Allgemeinen können Sie keinen benutzergenerierten Text verwenden, um Windows-Verzeichnisnamen zu erstellen. Wenn Sie Benutzern erlauben möchten, beliebige Namen zu nennen, müssen Sie sichere Namen wie A
erstellen , AB
, A2
speichern benutzergenerierte Namen und ihre Pfadäquivalente in einer Anwendungsdatendatei und führen eine Pfadzuordnung in Ihrer Anwendung durch.
Wenn Sie benutzergenerierte Ordnernamen unbedingt zulassen müssen, besteht die einzige Möglichkeit, festzustellen, ob sie ungültig sind, darin, Ausnahmen abzufangen und anzunehmen, dass der Name ungültig ist. Selbst das ist mit Gefahren behaftet, da sich die Ausnahmen, die für verweigerten Zugriff, Offline-Laufwerke und zu wenig Speicherplatz ausgelöst werden, mit denen überschneiden, die für ungültige Namen ausgelöst werden können. Du öffnest eine riesige Schadensdose.
Unter Linux und anderen Unix-bezogenen Systemen gibt es nur zwei Zeichen, die nicht im Namen einer Datei oder eines Verzeichnisses vorkommen dürfen, und das sind NUL '\0'
und Schrägstrich '/'
. Der Schrägstrich kann natürlich in einem Pfadnamen vorkommen und Verzeichniskomponenten trennen.
Gerüchten zufolge hatte Steven Bourne (bekannt als „Shell“) ein Verzeichnis mit 254 Dateien, eine für jeden einzelnen Buchstaben (Zeichencode), der in einem Dateinamen vorkommen kann (außer /
, '\0'
; den Namen .
war natürlich das aktuelle Verzeichnis). Es wurde verwendet, um die Bourne-Shell zu testen, und richtete routinemäßig Verwüstungen bei unvorsichtigen Programmen wie Sicherungsprogrammen an.
Andere Leute haben die Windows-Regeln abgedeckt.
Beachten Sie, dass MacOS X ein Dateisystem hat, bei dem die Groß-/Kleinschreibung nicht beachtet wird.
Es waren Kernighan &Pike in The Practice of Programming, die in Kapitel 6, Testen, §6.5 Stresstests, so viel sagten:
Als Steve Bourne seine Unix-Shell schrieb (die als Bourne-Shell bekannt wurde), erstellte er ein Verzeichnis mit 254 Dateien mit Namen aus einem Zeichen, eine für jeden Bytewert außer '\0'
und Schrägstrich, die beiden Zeichen, die in Unix-Dateinamen nicht vorkommen dürfen. Er verwendete dieses Verzeichnis für alle Arten von Mustererkennungs- und Tokenisierungstests. (Das Testverzeichnis wurde natürlich von einem Programm erstellt.) Jahre später war dieses Verzeichnis der Fluch von Programmen, die Dateibäume durchwanderten; es hat sie auf die Probe gestellt.