2008-09-23 14 views

Antwort

14

Von: http://www.grouplogic.com/knowledge/index.cfm/fuseaction/view_Info/docID/111.

Die folgenden Zeichen sind ungültig als Datei- oder Ordnernamen unter Windows mit NTFS: /?<>\:*|" und jedes Zeichen können Sie mit der Strg-Taste eingeben.

Zusätzlich zu den oben genannten unzulässigen Zeichen ist das Caret ^ unter Windows-Betriebssystemen, die das FAT-Dateisystem verwenden, ebenfalls nicht zulässig.

Unter Windows mit dem FAT-Dateisystem können Datei- und Ordnernamen bis zu 255 Zeichen lang sein.

Unter Windows mit dem NTFS-Dateisystem können Datei- und Ordnernamen bis zu 256 Zeichen lang sein.

Unter Windows beträgt die Länge eines vollständigen Pfades unter beiden Systemen 260 Zeichen.

Neben diesen Zeichen sind folgende Konventionen auch illegal:

  • einen Raum am Ende des Namens platzieren
  • einen Punkt am Ende des Namens platzieren

Die folgenden Dateinamen sind auch unter Windows reserviert:

  • com1,
  • ,
  • ...
  • com9,
  • lpt1,
  • lpt2,
  • ...
  • lpt9,
  • con,
  • nul,
  • prn
+5

aux ist auch kein erlaubter Dateiname in Windows gemäß dem Artikel Adam erwähnt –

+1

Ich finde die Legitimität dieses Artikels fraglich, weil es besagt, dass unter Mac OS X" File und Ordnernamen dürfen nicht mit einem Punkt '.' beginnen ", was absolut falsch ist. – Chris

+1

Es sind nicht nur die Dateinamen, die Sie unter Windows reserviert haben, es ist eines davon Gerätenamen, gefolgt von irgendeiner Erweiterung, z. 'COM5.foo' und' COM5.bar' sind illegal. –

2

Nun, für MSDOS/Windows, NUL, PRN, LPT < n> und CON. Sie haben sogar Probleme verursachen, wenn mit einer Erweiterung verwendet: „NUL.TXT“

+1

Ran in diesen Unsinn heute. Keine Ahnung, warum diese Dateinamen illegal sind, wenn Sie ihnen Erweiterungen hinzufügen> :( –

+0

Ich denke, es sind Programme wie LINK.EXE (erinnern Sie sich daran?), Die einen Basisdateinamen akzeptieren würden, und dann drei verschiedene Dateien mit unterschiedlicher Erweiterung generieren könnte einfach "nul" oder "prn" eingeben, und das Programm könnte einfach blind die Erweiterung hinzufügen, und die Dinge würden immer noch funktionieren. –

4

Eine knifflige Unix Gotcha, wenn Sie nicht wissen:

Dateien, die mit Start - oder - sind legal, aber ein Schmerz im Hintern zu arbeiten, da viele Befehlszeilen-Tools denken, dass Sie ihnen Optionen zur Verfügung stellen.

Viele dieser Werkzeuge haben einen speziellen Marker „-“ das Ende der Optionen, um zu signalisieren:

gzip -9vf -- -mydashedfilename 
1

Wenn Sie keine besonderen Verzeichnisse sind zu berühren, die nur illegal Namen auf Linux sind ‚.‘ und "..". Jeder andere Name ist möglich, obwohl der Zugriff auf einige von ihnen aus der Shell die Verwendung von Escape-Sequenzen erfordert.

EDIT: Wie Vinko Vrsalovic sagte, sind Dateien beginnend mit '' und '--' ein Schmerz von der Shell, da diese Zeichenfolgen von der Anwendung interpretiert werden, nicht die Shell.

+0

Wenn das stimmt, wie erstellt man einen Dateinamen mit einem Schrägstrich darin? – Malvineous

+0

Yep, '/'ist in einem Dateinamen auf keinem Dateisystemtyp gültig – Basic

4

Wie andere schon sagten, sind Gerätenamen wie COM1 unter Windows nicht als Dateinamen möglich, da sie reservierte Geräte sind.

Allerdings gibt es eine Flucht Methode zum Erstellen und Zugriff auf Dateien mit diesen reservierten Namen, zum Beispiel, wird dieser Befehl die Ausgabe des ver Befehls in eine COM1 genannt Datei umleiten:

ver > "\\?\C:\Users\username\COM1" 

Jetzt werden Sie habe eine Datei namens COM1, die 99% der Programme nicht öffnen können, und wird wahrscheinlich einfrieren, wenn Sie versuchen, darauf zuzugreifen.

Here's the Microsoft article, die erklärt, wie dieser "file namespace" funktioniert. Im Grunde sagt es Windows, dass es keine String-Verarbeitung für den Text durchführen soll und es direkt an das Dateisystem weitergibt. Dieser Trick kann auch für Pfade mit mehr als 260 Zeichen verwendet werden.

+0

Ich habe versucht, die erstellte Datei wieder zu löschen, aber del in der Befehlszeile einfriert ... Edit: Ich kann Ereignis töten cmd mit Task-Manager oder Prozess-Hacker ... was geht hier vor? –

+0

Funktioniert gut für mich. Sie können nicht "del COM1", weil natürlich versuchen, auf die serielle Schnittstelle statt der Datei zuzugreifen und den Prozess zu blockieren, warten auf eine Antwort von der seriellen Schnittstelle selbst (genau der Grund, warum Dateinamen wie diese reserviert sind und nicht für die Verwendung an erster Stelle verfügbar.) Wenn Sie die Escape-Methode in meiner Antwort verwendet haben, um die Datei zu erstellen, müssen Sie diese auch verwenden, um sie zu löschen: "del" \\? \ C: \ Users \ username \ COM1 "' – Malvineous

+0

Natürlich habe ich den gleichen \\ \ Pfad zum Löschen verwendet. Ich frage mich nur, warum mein Cmd erstarrt ist. Ich habe aufgegeben und mein komplettes Betriebssystem neu installiert. Das hat es ziemlich schnell repariert. –