[C#][VB.NET]ファイル名が正しいかチェックする

ファイル名やパスには使用できない文字があり、これらの文字を使用してファイル作成などを行うと例外「System.ArgumentException "パスに無効な文字が含まれています。"」が発生します。

ファイル名に使用できない文字

ファイル名に使用できない文字はSystem.IO.Path.GetInvalidFileNameChars、パスに使用できない文字はSystem.IO.Path.GetInvalidPathCharsで取得できます。 使用できない文字の配列を返すだけでチェックはしてくれません。

ファイル名とパスの違い

このページの説明では、ファイル名にフォルダ(ディレクトリ)名も含みます。 パスは、ファイル名にフォルダ区切り文字を含んだものを指します。

「c:\test\test.txt」 -> パス

上記の「test」と「test.txt」がファイル名

ファイル作成で使用できないファイル名

次の名前は特別な意味を持ち、ファイル作成で使用できません。拡張子がついていても同様です。

サンプルコード

文字列を渡すとパス(ファイル名)として正しいかチェックをする関数と、その使い方です。

資料 Windowsでファイル名とパスに使用できない文字

ファイル名 パス 文字コード(16進) 文字コード(10進) コード 英名 意味
0x22 034 "
0x3c 060 <
0x3e 062 >
0x7c 124
0x00 000 NUL Null 空文字 / 終端
0x01 001 SOH Start Of Heading ヘッダ開始
0x02 002 STX Start Of Text テキスト開始
0x03 003 ETX End Of Text テキスト終了
0x04 004 EOT End Of Transmission 伝送終了
0x05 005 ENQ Enquery 問い合わせ
0x06 006 ACK Acknowledgement 肯定応答
0x07 007 \a(BEL) Bell 警告音を鳴らす
0x08 008 \b(BS) Back Space 一文字後退
0x09 009 \t(HT) Horizontal Tabulation 水平タブ
0x0a 010 \n(LF/NL) Line Feed / New Line 改行
0x0b 011 \v(VT) Vertical Tabulation 垂直タブ
0x0c 012 \f(FF/NP) Form Feed / New Page 改ページ
0x0d 013 \r(CR) Carriage Return 行頭復帰
0x0e 014 SO Shift Out シフトアウト(多バイト文字終了)
0x0f 015 SI Shift In シフトイン(多バイト文字開始)
0x10 016 DLE Data Link Escape データリンク拡張(バイナリ通信開始)
0x11 017 DC1 Device Control 1 装置制御1
0x12 018 DC2 Device Control 2 装置制御2
0x13 019 DC3 Device Control 3 装置制御3
0x14 020 DC4 Device Control 4 装置制御4
0x15 021 NAK Negative Acknowledgement 否定応答
0x16 022 SYN Synchronous idle 同期
0x17 023 ETB End of Transmission Block 伝送ブロック終了
0x18 024 CAN Cancel 取り消し
0x19 025 EM End of Medium 記録媒体終端
0x1a 026 SUB/EOF Substitute / End Of File 文字置換 / ファイル終端
0x1b 027 ESC Escape エスケープ(特殊文字開始)
0x1c 028 FS File Separator ファイル区切り
0x1d 029 GS Group Separator グループ区切り
0x1e 030 RS Record Separator レコード区切り
0x1f 031 US Unit Separator ユニット区切り
0x3a 058 :
0x2a 042 *
0x3f 063 ?
0x5c 092 \
0x2f 047 /

サンプルコードのダウンロード

サンプルコードの実行には Microsoft Visual Studio 2008 以上のバージョンが必要です。 2008以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。

検証環境

関連ページ