.NET TIPS

ファイル名に使用できない文字をチェックするには?[2.0のみ、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2007/02/02

 Windowsでは「"」「<」「>」「|」「:」「*」「?」「\」「/」といった文字や、文字コードが0〜31番の文字などはファイル名として使えない。このため、ユーザーにより入力された文字列などをファイル名として用いる場合には、これらの文字を取り除いたり、別の文字に置き換えたりする必要がある。

 .NET Framework 2.0のクラス・ライブラリでは、Windowsでファイル名に使用できない文字の一覧を取得するためのGetInvalidFileNameCharsメソッドがPathクラス(System.IO名前空間)に用意されている。このメソッドは文字の配列を返す静的メソッドである。

 次のサンプル・プログラムはGetInvalidFileNameCharsメソッドを使用した例である。このプログラムのValidFileNameメソッドは、パラメータとして渡された文字列に含まれる無効な文字を「_」に置き換える。

// invalidchars.cs

using System;
using System.IO;

class InvalidChars {
  public static string ValidFileName (string s) {

    string valid = s;
    char[] invalidch = Path.GetInvalidFileNameChars();

    foreach (char c in invalidch) {
      valid = valid.Replace(c, '_');
    }
    return valid;
  }

  static void Main() {
    string badname = "this/is:bad|file?";
    string goodname = ValidFileName(badname);
    Console.WriteLine(goodname); // 出力:this_is_bad_file_
  }
}

// コンパイル方法:csc invalidchars.cs
ファイル名として無効な文字を「_」に置き換えるC#のサンプル・プログラム(invalidchars.cs)

' invalidchars.vb

Imports System
Imports System.IO

Class InvalidChars
  Shared Function ValidFileName (ByVal s As String) As String

    Dim valid As String = s
    Dim invalidch As Char() = Path.GetInvalidFileNameChars()

    For Each c As Char In invalidch
      valid = valid.Replace(c, "_")
    Next
    return valid
  End Function

  Shared Sub Main()
    Dim badname As String = "this/is:bad|file?"
    Dim goodname As String = ValidFileName(badname)
    Console.WriteLine(goodname) ' 出力:this_is_bad_file_
  End Sub
End Class

' コンパイル方法:vbc invalidchars.vb
ファイル名として無効な文字を「_」に置き換えるVBのサンプル・プログラム(invalidchars.vb)

 なおWindowsでは、CON、PRN、AUX、NUL、COM0〜9、LPT0〜9といった名前のファイルも(基本的には)作成できない。これらをチェックするメソッドはクラス・ライブラリには用意されていないが、いずれにせよユーザーから入力された文字列をファイル名として使用するような場合にはtry〜catch構文による例外処理は欠かせない。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル
使用ライブラリ: Pathクラス(System.IO名前空間)

この記事と関連性の高い別の.NET TIPS
文字と文字列を変換するには?
文字列の長さを取得するには?
パス文字列からファイル名部分を取り出すには?
文字列の前後にある余分な空白文字を取り除くには?
文字列やテキストをHTMLエンコードするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH