649 Stimmen

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

Ich weiß, dass / ist unter Linux verboten, und unter Windows sind die folgenden Dinge verboten (Ich glaube) * . " / \ [ ] : ; | ,

Was fehlt mir noch?

Ich brauche jedoch einen umfassenden Leitfaden, der folgende Punkte berücksichtigt Doppelbyte-Zeichen berücksichtigt. Ein Link zu externen Quellen ist für mich in Ordnung.

Ich muss zunächst ein Verzeichnis im Dateisystem erstellen, dessen Name möglicherweise verbotene Zeichen enthalten kann, weshalb ich plane, diese Zeichen durch Unterstriche ersetzen. Anschließend muss ich dieses Verzeichnis und seinen Inhalt in eine Zip-Datei schreiben schreiben (mit Java), daher wäre ich für jeden zusätzlichen Ratschlag bezüglich der Namen von Zip-Verzeichnissen geschätzt werden.

0voto

FCastro Punkte 551

Mit Stand vom 18.04.2017 ist unter den Antworten zu diesem Thema keine einfache Schwarz-Weiß-Liste von Zeichen und Dateinamen zu finden - und es gibt viele Antworten.

Der beste Vorschlag, der mir einfiel, war, den Benutzer die Datei benennen zu lassen, wie er will. Wenn die Anwendung versucht, die Datei zu speichern, fangen Sie alle Ausnahmen ab, gehen davon aus, dass der Dateiname schuld ist (nachdem Sie sich vergewissert haben, dass auch der Speicherpfad in Ordnung ist) und fordern den Benutzer auf, einen neuen Dateinamen zu wählen. Die besten Ergebnisse erzielen Sie, wenn Sie dieses Prüfverfahren in eine Schleife einbauen, die so lange läuft, bis der Benutzer entweder richtig liegt oder aufgibt. Das hat bei mir am besten funktioniert (zumindest in VBA).

-2voto

forthy42 Punkte 102

In Unix-Shells können Sie fast jedes Zeichen in einfache Anführungszeichen setzen ' . Mit Ausnahme des einfachen Anführungszeichens selbst, und Sie können keine Steuerzeichen ausdrücken, weil \ wird nicht erweitert. Der Zugriff auf das einfache Anführungszeichen selbst aus einer Zeichenkette in Anführungszeichen ist möglich, da Sie Zeichenketten mit einfachen und doppelten Anführungszeichen verketten können, wie 'I'"'"'m' die verwendet werden kann, um auf eine Datei namens "I'm" (auch hier sind Anführungszeichen möglich).

Man sollte also alle Steuerzeichen vermeiden, weil sie in der Shell zu schwer einzugeben sind. Der Rest ist immer noch lustig, besonders Dateien, die mit einem Bindestrich beginnen, weil die meisten Befehle diese als Optionen lesen, es sei denn, Sie haben zwei Bindestriche -- vor, oder Sie geben sie mit ./ die auch den Startpunkt verdeckt - .

Wenn Sie nett sein wollen, verwenden Sie keines der Zeichen, die die Shell und typische Befehle als syntaktische Elemente verwenden, manchmal positionsabhängig, so können Sie z.B. immer noch verwenden - , aber nicht als erstes Zeichen; dasselbe gilt für . können Sie es nur dann als erstes Zeichen verwenden, wenn Sie es ernst meinen ("versteckte Datei"). Wenn Sie es ernst meinen, sind Ihre Dateinamen VT100-Escape-Sequenzen ;-), so dass ein ls die Ausgabe verstümmelt.

-3voto

Matthias Ronge Punkte 8421

Bei der Erstellung von Internet-Verknüpfungen in Windows werden bei der Erstellung des Dateinamens unzulässige Zeichen übersprungen, mit Ausnahme des Schrägstrichs, der in ein Minuszeichen umgewandelt wird.

-8voto

Meng Lu Punkte 11870

Ich hatte das gleiche Bedürfnis und war auf der Suche nach Empfehlungen oder Standardreferenzen und stieß auf diesen Thread. Meine aktuelle schwarze Liste von Zeichen, die in Datei- und Verzeichnisnamen vermieden werden sollten, sind:

$CharactersInvalidForFileName = {
    "pound" -> "#",
    "left angle bracket" -> "<",
    "dollar sign" -> "$",
    "plus sign" -> "+",
    "percent" -> "%",
    "right angle bracket" -> ">",
    "exclamation point" -> "!",
    "backtick" -> "`",
    "ampersand" -> "&",
    "asterisk" -> "*",
    "single quotes" -> "“",
    "pipe" -> "|",
    "left bracket" -> "{",
    "question mark" -> "?",
    "double quotes" -> "”",
    "equal sign" -> "=",
    "right bracket" -> "}",
    "forward slash" -> "/",
    "colon" -> ":",
    "back slash" -> "\\",
    "lank spaces" -> "b",
    "at sign" -> "@"
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X