シンプルにして、まず質問に答えましょう。
<オール>禁止されている印刷可能な ASCII 文字
-
Linux/Unix:
/ (forward slash)
-
ウィンドウ:
< (less than) > (greater than) : (colon - sometimes works, but is actually NTFS Alternate Data Streams) " (double quote) / (forward slash) \ (backslash) | (vertical bar or pipe) ? (question mark) * (asterisk)
印刷できない文字
データが印刷不可能な文字を許可するソースからのものである場合は、さらに確認する必要があります。
-
Linux/Unix:
0 (NULL byte)
-
ウィンドウ:
0-31 (ASCII control characters)
注: Linux/Unix ファイル システムでは、ファイル名に制御文字を含むファイルを作成することは合法ですが、ユーザーがそのようなファイルを処理するのは悪夢かもしれません。
予約済みのファイル名
次のファイル名は予約されています:
-
ウィンドウ:
CON, PRN, AUX, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
(単独でも、任意のファイル拡張子 (例:
LPT1.txt
) の両方) ).
その他のルール
-
ウィンドウ:
ファイル名をスペースまたはドットで終わらせることはできません。
禁止されているファイル名文字の「包括的なガイド」は、文字だけでなくファイル名も予約しているため、Windows では機能しません。はい、*
のような文字 "
?
などは禁止されていますが、禁止されている有効な文字のみで構成された名前は無数にあります。たとえば、スペースとドットは有効なファイル名文字ですが、これらの文字のみで構成された名前は禁止されています。
Windows では大文字と小文字が区別されないため、A
という名前のフォルダーを作成することはできません a
という名前の場合 もう存在している。さらに悪いことに、PRN
のような一見許可されている名前 そして CON
、およびその他の多くは予約されており、許可されていません。 Windows にもいくつかの長さの制限があります。あるフォルダで有効なファイル名が、別のフォルダに移動すると無効になる場合があります。ファイルとフォルダーの命名規則は、Microsoft ドキュメントにあります。
通常、ユーザー生成テキストを使用して Windows ディレクトリ名を作成することはできません。ユーザーが好きな名前を付けられるようにしたい場合は、 A
のような安全な名前を作成する必要があります 、 AB
、 A2
など、ユーザーが生成した名前とそれに相当するパスをアプリケーション データ ファイルに保存し、アプリケーションでパス マッピングを実行します。
ユーザーが生成したフォルダー名を絶対に許可する必要がある場合、それらが無効かどうかを確認する唯一の方法は、例外をキャッチして名前が無効であると想定することです。拒否されたアクセス、オフラインのドライブ、およびドライブ容量不足に対してスローされる例外は、無効な名前に対してスローされる可能性がある例外と重複するため、それでも危険をはらんでいます。あなたは 1 つの巨大な傷の缶を開いています。
Linux およびその他の Unix 関連システムでは、ファイルまたはディレクトリの名前に使用できない文字は 2 文字だけで、それらは NUL '\0'
です。 およびスラッシュ '/'
.もちろん、スラッシュをパス名に使用して、ディレクトリ コンポーネントを区切ることができます。
噂によると、スティーブン・ボーン (「シェル」で有名) には、ファイル名に含まれる可能性のある文字 (文字コード) ごとに 1 つずつ、254 個のファイルを含むディレクトリがありました (/
を除く)。 、 '\0'
;名前 .
もちろん、現在のディレクトリでした)。これは Bourne シェルのテストに使用され、バックアップ プログラムなどの不注意なプログラムに日常的に大混乱をもたらしました。
他の人が Windows のルールをカバーしています。
MacOS X には大文字と小文字を区別しないファイル システムがあることに注意してください。
The Practice of Programming の Kernighan と Pike は、第 6 章、テスト、§6.5 ストレス テストで次のように述べています。
<ブロック引用>
Steve Bourne が Unix シェル (後に Bourne shell として知られるようになった) を書いていたとき、彼は '\0'
を除く各バイト値に 1 つずつ、1 文字の名前を持つ 254 個のファイルのディレクトリを作成しました。 およびスラッシュは、Unix ファイル名に使用できない 2 つの文字です。彼はそのディレクトリを使用して、パターン マッチングとトークン化のあらゆる種類のテストを行いました。 (もちろん、テスト ディレクトリはプログラムによって作成されました。) その後何年もの間、そのディレクトリはファイル ツリー ウォーク プログラムの悩みの種でした。それはそれらを破壊するまでテストしました.