it-swarm.com.de

Welche Zeichen sind in Windows- und Linux-Verzeichnisnamen verboten?

Ich weiß, dass/in Linux illegal ist, und die folgenden sind in Windows illegal (ich denke) *."/\[]:;|,

Was fehlt mir noch?

Ich benötige jedoch einen umfassenden Leitfaden, der Doppelbytezeichen berücksichtigt. Links zu externen Ressourcen sind für mich in Ordnung.

Ich muss zuerst ein Verzeichnis auf dem Dateisystem erstellen, das einen Namen enthält, der möglicherweise verbotene Zeichen enthält. Daher plane ich, diese Zeichen durch Unterstriche zu ersetzen. Ich muss dann dieses Verzeichnis und seinen Inhalt in eine Zip-Datei schreiben (mit Java), daher wäre jeder zusätzliche Rat bezüglich der Namen der Zip-Verzeichnisse willkommen.

296
Jeff

Ein "umfassender Leitfaden" für verbotene Dateinamenzeichen funktioniert unter Windows nicht, da sowohl Dateinamen als auch Zeichen reserviert werden. Ja, Zeichen wie *"? und andere sind verboten, aber es gibt unendlich viele Namen, die nur aus gültigen Zeichen bestehen, die verboten sind. Beispielsweise sind Leerzeichen und Punkte gültige Dateinamen, Namen, die nur aus diesen Zeichen bestehen, sind jedoch verboten.

Windows unterscheidet nicht zwischen Groß- und Kleinbuchstaben. Sie können daher keinen Ordner mit dem Namen A erstellen, wenn bereits ein Ordner mit dem Namen a vorhanden ist. Schlimmer noch, scheinbar erlaubte Namen wie PRN und CON und viele andere sind reserviert und nicht erlaubt. Windows hat auch einige Längenbeschränkungen; Ein in einem Ordner gültiger Dateiname kann ungültig werden, wenn er in einen anderen Ordner verschoben wird. Die Regeln für Benennen von Dateien und Ordnern befinden sich in MSDN.

Sie können im Allgemeinen keinen benutzergenerierten Text verwenden, um Windows-Verzeichnisnamen zu erstellen. Wenn Sie Benutzern erlauben möchten, beliebige Namen zu vergeben, müssen Sie sichere Namen wie A, AB, A2 u.a. speichern benutzergenerierte Namen und ihre Pfadäquivalente in einer Anwendungsdatendatei und führen die Pfadzuordnung in Ihrer Anwendung durch.

Wenn Sie vom Benutzer generierte Ordnernamen unbedingt zulassen müssen, können Sie nur feststellen, ob sie ungültig sind, indem Sie Ausnahmen abfangen und davon ausgehen, dass der Name ungültig ist. Auch dies ist mit Gefahren behaftet, da sich die Ausnahmen für verweigerten Zugriff, Offlinelaufwerke und nicht genügend Speicherplatz mit den Ausnahmen für ungültige Namen überschneiden. Sie öffnen eine riesige Dose mit Verletzungen.

196
Dour High Arch

Lassen Sie es uns einfach halten und zunächst die Frage beantworten.

  1. 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)
      
  2. Nicht druckbare Zeichen

    Wenn Ihre Daten aus einer Quelle stammen, die nicht druckbare Zeichen zulässt, müssen Sie nach weiteren 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, es könnte ein Albtraum für die Benutzer sein, mit solchen Dateien umzugehen =.

  3. Reservierte Dateinamen

    Die folgenden 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 für sich als auch mit beliebigen Dateierweiterungen, z. B. LPT1.txt).

  4. Andere Regeln

    • Windows:

      Dateinamen dürfen nicht mit einem Leerzeichen oder Punkt enden.

405

Anstatt eine schwarze Liste mit Zeichen zu erstellen, können Sie eine Whitelist verwenden. Alles in allem ist der Bereich der Zeichen, die in einem Datei- oder Verzeichnisnamenskontext sinnvoll sind, recht kurz. Wenn Sie keine besonderen Namensanforderungen haben, können Ihre Benutzer dies nicht für Ihre Anwendung tun, wenn sie nicht das gesamte Format verwenden können. ASCII Tabelle.

Es löst nicht das Problem der reservierten Namen im Zieldateisystem, aber mit einer Whitelist ist es einfacher, die Risiken an der Quelle zu mindern.

In diesem Sinne ist dies eine Reihe von Zeichen, die als sicher angesehen werden können:

  • Buchstaben (von A bis Z) - bei Bedarf auch Unicode-Zeichen
  • Ziffern (0-9)
  • Unterstrich (_)
  • Bindestrich (-)
  • Space
  • Punkt (.)

Und alle zusätzlichen sicheren Zeichen, die Sie zulassen möchten. Darüber hinaus müssen Sie nur einige zusätzliche Regeln in Bezug auf Leerzeichen und Punkte einhalten. Dies ist normalerweise ausreichend:

  • Name muss mindestens einen Buchstaben oder eine Zahl enthalten (um nur Punkte/Leerzeichen zu vermeiden)
  • Name muss mit einem Buchstaben oder einer Zahl beginnen (um führende Punkte/Leerzeichen zu vermeiden)
  • Der Name darf nicht mit einem Punkt oder einem Leerzeichen enden (falls vorhanden, einfach zuschneiden, wie es der Explorer tut)

Dies erlaubt bereits recht komplexe und unsinnige Namen. Zum Beispiel wären diese Namen mit diesen Regeln möglich und in Windows/Linux gültige Dateinamen:

  • A...........ext
  • B -.- .ext

Im Wesentlichen sollten Sie auch bei so wenigen Zeichen auf der Whitelist entscheiden, was tatsächlich Sinn macht, und den Namen entsprechend validieren/anpassen. In einer meiner Anwendungen habe ich die gleichen Regeln wie oben verwendet, aber doppelte Punkte und Leerzeichen entfernt.

31
AeonOfTime

Nun, wenn auch nur zu Forschungszwecken, dann ist es am besten, sich diesen Wikipedia-Eintrag zu Dateinamen anzuschauen.

Wenn Sie eine portable Funktion schreiben möchten, um Benutzereingaben zu validieren und darauf basierend Dateinamen zu erstellen, lautet die kurze Antwort , nicht . Schauen Sie sich ein portables Modul wie Perls File :: Spec an, um einen Blick auf alle Hops zu werfen, die für eine solche "einfache" Aufgabe benötigt werden.

28

Sie können Windows auf einfache Weise dazu bringen, Ihnen die Antwort mitzuteilen, indem Sie versuchen, eine Datei über den Explorer umzubenennen und/für den neuen Namen einzugeben. Windows öffnet ein Meldungsfeld mit der Liste der unzulässigen Zeichen.

A filename cannot contain any of the following characters:
    \ / : * ? " < > | 

https://support.Microsoft.com/en-us/kb/177506

24
chrisjej

Für Windows können Sie dies mit PowerShell überprüfen

$PathInvalidChars = [System.IO.Path]::GetInvalidPathChars() #36 chars

Zur Anzeige von UTF-8-Codes können Sie konvertieren

$enc = [system.Text.Encoding]::UTF8
$PathInvalidChars | foreach { $enc.GetBytes($_) }

$FileNameInvalidChars = [System.IO.Path]::GetInvalidFileNameChars() #41 chars

$FileOnlyInvalidChars = @(':', '*', '?', '\', '/') #5 chars - as a difference
5

Ab dem 18.04.2017 ist in den Antworten zu diesem Thema keine einfache schwarze oder weiße Liste von Zeichen und Dateinamen zu sehen - und es gibt viele Antworten.

Der beste Vorschlag, den ich machen konnte, war, dem Benutzer den Namen der Datei zu überlassen, wie er möchte. Verwenden Sie einen Fehlerhandler, wenn die Anwendung versucht, die Datei zu speichern, fangen Sie Ausnahmen ab, nehmen Sie an, dass der Dateiname schuld ist (offensichtlich, nachdem Sie sichergestellt haben, dass der Speicherpfad auch in Ordnung ist), und fordern Sie den Benutzer zur Eingabe eines neuen Dateinamens auf. Um die besten Ergebnisse zu erzielen, platzieren Sie diese Überprüfungsprozedur in einer Schleife, die so lange fortgesetzt wird, bis der Benutzer sie richtig verstanden oder aufgegeben hat. Funktionierte am besten für mich (zumindest in VBA).

2
FCastro

In Windows 10 (2019) sind die folgenden Zeichen aufgrund eines Fehlers bei dem Versuch, sie einzugeben, nicht zulässig:

Ein Dateiname darf keines der folgenden Zeichen enthalten:

\ / : * ? " < > |

1
Bret Cameron

Die einzigen unzulässigen Unix-Zeichen könnten / Und NULL sein, obwohl einige Überlegungen zur Befehlszeileninterpretation enthalten sein sollten.

Während es beispielsweise zulässig sein kann, eine Datei 1>&2 Oder 2>&1 In Unix zu benennen, können Dateinamen wie diese in einer Befehlszeile falsch interpretiert werden.

Ebenso ist es möglich, eine Datei mit dem Namen $PATH Zu versehen. Wenn Sie jedoch versuchen, über die Befehlszeile darauf zuzugreifen, übersetzt die Shell $PATH In ihren Variablenwert.

1
Dogg Bookins

Beim Erstellen von Internetverknüpfungen in Windows werden zum Erstellen des Dateinamens unzulässige Zeichen mit Ausnahme von Schrägstrichen, die in Minus umgewandelt werden, übersprungen.

0
Matthias Ronge