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

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

ファイル名 と パス

このページでは[ファイル名]と[パス]を使い分けて解説しているので注意してください。

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

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

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

次の名前はデバイスドライバ用に予約されており、使用できません。拡張子がついていても同様です。

予約されている名前

COM0 COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9
LPT0 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9
CON PRN AUX NUL CLOCK$
環境により、多少異なる場合があります。

使用できない名前 + 拡張子の組み合わせもNGです。

NG例

サンプルコード

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

資料 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以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。

検証環境

関連ページ