Welche technischen Gründe gibt es, um keine Leerzeichen in Dateinamen zu verwenden?

47075
Chris W. Rea

Irgendjemand, den ich kenne, äußerte sich irritiert über diejenigen von uns, die in unseren Dateinamen keine Leerzeichen verwenden, z. B. NamingThingsLikeThis.txt- obwohl die meisten modernen Betriebssysteme Leerzeichen in Dateinamen unterstützen.

Gibt es technische Gründe, warum es immer noch üblich ist, Dateinamen ohne (geeignete) Leerzeichen zu sehen? Wenn ja, aus welchen technischen Gründen werden Leerzeichen in Dateinamen vermieden oder entmutigt, und unter welchen Umständen sind sie relevant?

Der offensichtlichste Grund, den ich mir vorstellen konnte und warum ich ihn normalerweise meide, sind die zusätzlichen Anführungszeichen, die in der Befehlszeile beim Umgang mit solchen Dateien erforderlich sind. Gibt es andere wichtige technische Gründe?

75
Wie Sie sagten, sind sie auf der Kommandozeile viel einfacher zu handhaben. Und für die Programmierung bin ich nicht sicher, ob es überhaupt möglich oder möglich ist, Leerzeichen in Dateinamen zu verwenden. Alvin Row vor 14 Jahren 0

5 Antworten auf die Frage

64
David Spillett

Whitespace-Zeichen in Dateinamen können in vielen Kontexten in der Befehlszeile und in Skripts, in denen Sie darauf achten müssen, dass sie richtig entkommen sind, ein recht königlicher Schmerz im Sprichwort sein. Sehen Sie also nicht nach Trennzeichen zu den Befehlen, die Sie sind Laufen.

Es ist einfach sicherer, sie nicht dort zu haben, selbst wenn Sie sicher sind, dass die Datei / dir / what-ever niemals in einem solchen Kontext verwendet wird.

Das und alte Gewohnheiten sterben schwer.

Sie sind auch ein richtiger königlicher Schmerz, mit dem man fertig werden muss, dann muss man Pfade zusammenstellen und sie ändern. Vergewissern Sie sich, dass die Komponenten nicht in Anführungszeichen gesetzt und für Änderungen nicht maskiert sind, bevor Sie sie erneut umschreiben / erneut zitieren, insbesondere wenn Teile an andere zu bearbeitende Codebits gesendet werden. afrazier vor 13 Jahren 0
Wenn Sie glauben, dass Leerzeichen schlecht sind, versuchen Sie, Dateien mit Zeilenumbrüchen (`'\ n') im Namen zu behandeln. (Unix-ähnliche Systeme erlauben dies tatsächlich; Windows im Allgemeinen oder macht es zumindest schwierig.) Keith Thompson vor 11 Jahren 2
30
Stobor

Neben den anderen Antworten zu Kommandozeilen und alten Gewohnheiten gibt es auch viele Netzwerkprotokolle, die beim Umgang mit Dateinamen, die Leerzeichen enthalten, besondere Vorsicht erfordern.

(Wenn Sie jemals versucht haben, "Product List.pdf" von einer Website herunterzuladen und am Ende eine Datei mit dem Namen "Product" erhalten hat, wurden Sie davon gebissen, weil der Programmierer am anderen Ende nicht wusste oder konnte Die Quotierungsregeln für den http Content-Disposition-Header werden nicht ermittelt.)

+1. HTTP für einen Anfang. Leerzeichen in URLs (für jedes Protokoll, nicht nur für HTTP) sollten zu% 20 oder + maskiert werden. Verwirrung kann entstehen, wenn sie nicht so codiert werden, wie es sein sollte. Für Webseiten gibt es einen visuellen Grund, um beide Leerzeichen und den Unterstrich ("_") zu vermeiden, der häufig zum Ersetzen verwendet wird. In einem unterstrichenen Link sehen beide möglicherweise gleich aus, sodass jemand, der den Link manuell kopiert oder ihn jemandem vorlesen möchte, dies kann es ist falsch David Spillett vor 14 Jahren 11
Das Ärgerlichste daran, dass Leerzeichen in URLs codiert werden müssen, ist die Tendenz, dass bestimmte Software die Leerzeichen verschlüsselt ... SamB vor 13 Jahren 5
Ist das echt? Im Jahr 2018 passiert das? Chris Calo vor 6 Jahren 0
@ChrisCalo Sie werden vielleicht bemerken, dass diese Antwort 2009 statt 2018 gegeben wurde. Dies geschieht jedoch auch im Jahr 2018. Möglicherweise weniger, jetzt, da die meisten Rookie-Entwickler Frameworks verwenden, um Websites zu erstellen, anstatt alles von Grund auf neu zu erstellen ein Problem. Stobor vor 6 Jahren 0
28
Der Hochstapler

Viele Gründe sind historisch. Das bedeutet nicht, dass sie heute keinen Sinn ergeben.

Probleme bei der Portabilität

Bei der Benennung einer Datei müssen Sie möglicherweise auch berücksichtigen, wie andere (Dateisysteme) diesen Dateinamen behandeln. Ein Zeichen in einem Dateinamen ist für Ihr System möglicherweise in Ordnung, für ein anderes System kann es jedoch ein Problem sein.

Solange die geringste Möglichkeit bestand, dass Sie von einem älteren System aus problemlos auf die Datei zugreifen können, wählen Sie nur einen sicheren Charakter. Dies kann das Booten in einem alten Wiederherstellungssystem, das Sie aufbewahrt haben, oder die Angst, dass aktuelle Windows-Versionen immer noch auf MS-DOS basieren, umfassen.

Länge

Ein Dateisystem kann die Länge einer Datei begrenzen. Dies war noch schwerwiegender während der Tage, als MS-DOS auf 8.3-Dateinamen beschränkt war . Wenn Sie also Leerzeichen weglassen, können Sie dem Namen aussagekräftigere Zeichen hinzufügen.

In einigen anderen Dateisystemen wurden auch strenge Grenzen für die Dateinamenlänge definiert. Wikipedia hat im Artikel eine Tabelle über den Vergleich von Dateisystemen für diejenigen, die die Details wünschen.

Reservierte Charaktere

MS-DOS definierte auch das Leerzeichen als reserviertes Zeichen. Dies ist darauf zurückzuführen, dass das Leerzeichen in der FAT für das Auffüllen verwendet wurde . Darüber hinaus stellte MS-DOS in der Shell kein abgehendes System zur Verfügung.

Befehlszeileninterpretation

In den meisten mir bekannten Befehlszeilen wird das Leerzeichen als Parameterbegrenzer verwendet . Wenn Sie versäumen, einen Dateinamen ordnungsgemäß zu schützen, kann dies schwerwiegende Folgen haben, da Teile des Dateinamens als Parameter für die Anwendung interpretiert werden können, die Sie aufrufen wollten.

Betrachten Sie den Unterschied zwischen

rm foo bar 

und

rm "foo bar" 

Der oben verlinkte WikiPedia-Artikel weist sogar auf die Mehrdeutigkeit hin, die durch das Fehlen eines Befehls hervorgerufen wird:

Mehrdeutigkeit kann entweder verhindert werden, indem eingebettete Leerzeichen in Datei- und Verzeichnisnamen zunächst verboten werden (z. B. durch Unterstriche '_') oder wenn dies vom Befehlszeileninterpreter und den Programmen unterstützt wird, die diese Parameter als verwenden Argumente, indem Sie einen Namen mit eingebetteten Leerzeichen zwischen Anführungszeichen einschließen oder ein Escape-Zeichen vor dem Leerzeichen verwenden, normalerweise ein Backslash ('\'). Zum Beispiel

Long path/Long program name Parameter one Parameter two ... 

ist mehrdeutig (ist "Programmname" Teil des Programmnamens oder zwei Parameter?); jedoch

Long_path/Long_program_name Parameter_one Parameter_two ..., LongPath/LongProgramName ParameterOne ParameterTwo ..., "Long path/Long program name" "Parameter one" "Parameter two" ... 

und Long \ Pfad / Long \ Programm \ Name Parameter \ ein Parameter \ zwei ...

sind nicht mehrdeutig.

URL-Adressen (Uniform Resource Locators)

Wenn Sie versuchen, den Speicherort einer Datei mithilfe einer URL zu beschreiben, müssen Leerzeichen mit Escapezeichen versehen werden.

Zeichen können aus verschiedenen Gründen unsicher sein. Das Leerzeichen ist nicht sicher, da signifikante Leerzeichen verschwinden können und unbedeutende Leerzeichen eingefügt werden können, wenn URLs transkribiert oder gesetzt oder Textverarbeitungsprogrammen behandelt werden.

Quelle: RFC1738

Ein Leerzeichen muss daher durch ein ersetzt %20werden. Dadurch wird der Dateiname weniger gut lesbar als der Dateiname und daher wird dies von den Benutzern überhaupt vermieden.

Das ist eine wirklich gute Antwort. Es sollte oben sein! Kamil vor 9 Jahren 0
25
user7012

Leerzeichen werden %20im Web in Dateinamen konvertiert oder umgewandelt, sodass die Verwaltung der Assets einer Site möglicherweise schwieriger wird.

Haben Image 1.pngund Image%201.pngist verwirrend. Es ist einfacher Image001.pngstattdessen zu verwenden .

Dies fällt wirklich unter die gleiche Kategorie wie Escape-Sequenzen für die Befehlszeile.

5
Rook

Leerzeichen können manchmal ein Problem darstellen, wenn sie in der Befehlszeile ausgeführt werden, wenn ältere Betriebssysteme verwendet werden oder wenn Programme geschrieben werden, die auf verschiedenen Betriebssystemen kompiliert werden, oder wenn ... es viele Gründe gibt, die problematisch sein können. Es ist wirklich ein Problem, die Datei als file-without-blanks.txt oder file_without_blanks.txt zu schreiben . Ich bevorzuge das dask, weil der Unterstrich manchmal unsichtbar wird, wenn es sich beispielsweise um unterstrichene Schriftarten handelt.

Meistens handelt es sich jedoch um Gewohnheit ab dem Alter. Die ich fühle mich dort nicht genug sind pro Gründen zu verlassen.


Eine zusätzliche Anmerkung, möglicherweise nicht verwandt, aber ich werde sie trotzdem hier angeben. Leute, die ihre Dateien mit Leerzeichen benennen, denken normalerweise nicht viel darüber. Diejenigen, die nicht oft wissen, warum es gut ist, sie in Dateinamen zu vermeiden.
Und wir können uns alle einig sein, dass es nichts Schlimmeres gibt als eine Datei mit den Namen "Sehr geehrte Damen und Herren, ich schreibe Ihnen diesen Brief, um Sie über yo.doc zu informieren".

Nicht nur Leerzeichen - die Dateilänge zählt auch für etwas und IMHO sollte es nicht länger als 30 Zeichen sein. Denn lange Dateinamen mit Leerzeichen sind auch ein Segen bei der Aufnahme von CDs, DVDs und dergleichen, die unter älteren Betriebssystemen gelesen werden müssen, und zwischen Win- und * nix-Plattformen.

Lazy Word-Benutzer ... SamB vor 12 Jahren 2