Warum können Sie in einem Dateinamen keine Sonderzeichen wie "?" Oder ";" verwenden?

17

Wenn ich versuche, eine Datei zu speichern, erhalte ich unter Windows die Meldung, dass der Dateiname ungültig ist, wenn ich im Namen Sonderzeichen (z. B. einen Doppelpunkt, ein Fragezeichen oder ein Ausrufezeichen) verwende.

Warum das?

user284989
quelle
In welchem ​​Programm versuchen Sie, eine Datei zu speichern, und ist das fehlerhafte Zeichen in der Datei oder (wie es scheint) im Dateinamen?
Jukka K. Korpela

Antworten:

22

Es gibt verschiedene Zeichen, die für Windows eine besondere Bedeutung haben (und für DOS, woher die meisten Zeichen ursprünglich stammten).

von MSDN :

Ein Dateiname darf keines der folgenden Zeichen enthalten:
\ /: *? "<> |

/ist ein Schalter (und auch ein Verzeichnis-Trennzeichen).
\ist ein Verzeichnisseparator.
:ist ein Laufwerksbezeichner.
*und ?sind Platzhalter, die bei der Suche verwendet werden.
"ist eine Möglichkeit, Leerzeichen in Parametern zuzulassen.
<und >sind Umleitungen, die die Eingabe und Ausgabe eines Programms von etwas anderem als Bildschirm / Tastatur ermöglichen.
|ist eine Pipe, mit der die Ausgabe eines Programms als Eingabe für das nächste Programm verwendet werden kann.

SeanC
quelle
1
Um diese Antwort zu verdeutlichen, könnten diese Sonderzeichen das Parsen einer Befehlszeile (oder eines Pfads) beeinträchtigen, wenn sie sich in einem Dateinamen befinden. Es ist nicht erforderlich, den Dateinamen in irgendeiner Weise zu begrenzen (z. B. in Anführungszeichen oder Leerzeichen). Wenn Sie also auf ein solches Sonderzeichen stoßen, führt dies zu einer fehlerhaften Syntaxanalyse (dh ist das Sonderzeichen Teil des Dateinamens oder ein Operator?).
Sägemehl
1
Es ist jedoch fraglich, ob einige dieser Einschränkungen aufgrund des Umgangs mit langen Dateinamen und Anführungszeichen nicht mehr erforderlich sind. \ ? *und "sind die einzigen, die in der aktuellen Syntax wirklich benötigt werden, da die anderen Zeichen nur außerhalb von Anführungszeichen nützlich sind. Die Ausnahme ist: das ist nur nützlich als das zweite Zeichen, das verboten werden könnte, während es an anderer Stelle erlaubt wird. Mit anderen Worten, keine Datei mit dem Namen A:A letter's story.txt, aber kein Problem mit einer Datei mit dem NamenSarah: My favorite cat.txt
trlkly
<>"sind reservierte Platzhalterzeichen. Windows verwendet sie, um die komplexe Semantik für DOS *?.bei der Übersetzung in natives NT zu implementieren , das eine einfache Semantik für hat *?.. Die sechs Platzhalterzeichen sind reserviert, da Windows den Platzhalterabgleich im Dateisystem selbst, dh direkt im NtQueryDirectoryFileSystemaufruf, ohne Escape-Mechanismus implementiert . In Unix werden Platzhalter auf Anwendungsebene implementiert, normalerweise durch eine Shell, die das Escape-Verfahren unterstützt.
Eryk Sun
Beachten Sie, dass :in der Regel Dateinamen, nicht aber Dateipfade reserviert sind. Es wird für Gerätenamen und als Begrenzer für Dateistreams verwendet (z. B. "Dateiname: Streamname: Streamtyp"). Auch einige Dateisysteme wie die VirtualBox Shared-Ordner Dateisystem ermöglichen :, |und ASCII - Steuerzeichen (1-31) in Dateinamen, aber sie sind in allen Microsoft-Dateisystemen reserviert , außer für das Named-Pipe - Dateisystem.
Eryk Sun