ファイル名の一般的な構文規則について質問しているわけではありません。どこからともなく飛び出してあなたを噛む落とし穴を意味します。たとえば、Windows でファイルに「COM<n>」という名前を付けようとしていますか?
7 に答える
出典: http://www.grouplogic.com/knowledge/index.cfm/fuseaction/view_Info/docID/111。
次の文字は、NTFS を使用する Windows のファイル名またはフォルダー名として無効です:
/
?
<
>
\
:
*
|
"
および Ctrl キーで入力できる任意の文字。上記の不正な文字に加えて、キャレット
^
も FAT ファイル システムを使用する Windows オペレーティング システムでは許可されません。FAT ファイル システムを使用する Windows では、ファイル名とフォルダ名の長さは最大 255 文字です。
NTFS ファイル システムを使用する Windows では、ファイル名とフォルダ名の長さは最大 256 文字です。
Window では、両方のシステムでのフル パスの長さは 260 文字です。
これらの文字に加えて、次の規則も不正です。
- 名前の末尾にスペースを入れる
- 名前の末尾にピリオドを付ける
次のファイル名も Windows で予約されています。
aux
、com1
、com2
、- ...
com9
、lpt1
、lpt2
、- ...
lpt9
、con
、nul
、prn
Windows での合法および違法なファイル名の完全な説明:http://msdn.microsoft.com/en-us/library/aa365247.aspx
あなたが知らないときのトリッキーな Unix の落とし穴:
- または -- で始まるファイルは合法ですが、多くのコマンド ライン ツールがオプションを提供していると考えているため、使用するのは面倒です。
これらのツールの多くには、オプションの終わりを示す特別なマーカー「--」があります。
gzip -9vf -- -mydashedfilename
他の人が言ったように、COM1 のようなデバイス名は Windows ではファイル名として使用できません。これらは予約済みデバイスだからです。
ただし、これらの予約名でファイルを作成してアクセスするためのエスケープ メソッドがあります。たとえば、このコマンドは、ver
コマンドの出力を COM1 というファイルにリダイレクトします。
ver > "\\?\C:\Users\username\COM1"
これで、99% のプログラムが開くことができず、アクセスしようとするとおそらくフリーズする COM1 というファイルが作成されます。
この「ファイル名前空間」がどのように機能するかを説明するMicrosoft の記事を次に示します。基本的に、テキストに対して文字列処理を行わず、ファイルシステムに直接渡すように Windows に指示します。このトリックは、260 文字を超えるパスを処理するためにも使用できます。
boost::filesystem Portability Guideには、多くの優れた情報があります。
まあ、MSDOS/Windows、NUL、PRN、LPT<n>、および CON の場合です。拡張子「NUL.TXT」を使用すると、問題が発生することさえあります。
特別なディレクトリに触れていない限り、Linux で不正な名前は ' .
' と ' ..
' だけです。他の名前も可能ですが、シェルからそれらの一部にアクセスするには、エスケープ シーケンスを使用する必要があります。
-
編集: Vinko Vrsalovic が言ったように、' ' と ' ' で始まるファイル--
は、これらの文字シーケンスがシェルではなくアプリケーションによって解釈されるため、シェルからの苦痛です。