.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
パス文字列からファイル名部分を取り出すには?
文字列から特定の文字列を取り除くには?
文字と文字列を変換するには?
文字列を1文字ずつ解析するには?(サロゲート文字対応)
文字列の長さを取得するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間