ファイル名から拡張子を取得する

ファイル/フォルダ

System.IO.Path.GetExtension 関数

指定したパス文字列の中から拡張子を返します。

public static string System.IO.Path.GetExtension(string path)

path が null の場合は null。
path が拡張子情報を持たない場合、System.String.Empty を返します。

注意点としては以下です。

  • 拡張子にドットがついていることに注意です。
  • 拡張子の大文字/小文字もそのまま取得されます。

比較する場合は、気を付けてください。

// 例
if (System.IO.Path.GetExtension(file).ToLower() == ".jpg")

サンプル

private string GetExtensionFromFullPath(string file)
{
    //ファイルの拡張子を取得
    return System.IO.Path.GetExtension(file);
}

こんな関数はいかがでしょうか?その1

System.IO.Path.GetExtension関数自体はファイル存在チェックを行いません。文字列から拡張子だと思われる個所を抜き出すだけです。

ファイル存在チェックと併用してファイルが存在しない場合は空文字を返すようにしました。

関数例

private string GetExtensionFromFullPath(string file)
{
    try
    {
        //ファイルが存在しない場合は、空文字を返す
        if (System.IO.File.Exists(file) == false)
        {
            return "";
        }

        //ファイルの拡張子を取得
        return System.IO.Path.GetExtension(file).ToLower();

    }
    catch (Exception ex)
    {
        //異常が発生したときは、エラーメッセージを返す
        return ex.Message;
        /*
        //異常が発生した場合も空文字を返すようにしておく
        return "";
        */
    }
}

例外発生時の対応は、お好きなほうを使っていただければと思います。

使用例

//ファイル名から拡張子を取得する
this.ExtensionNameTextbox.Text = GetExtensionFromFullPath(this.FileNameTextbox.Text);

実行結果

こんな関数はいかがでしょうか?その2

拡張子の取得が成功か失敗かを判別したい場合にはこんな感じにするといいと思います。

関数例

/// <summary>
/// ファイル名から拡張子を取得する
/// </summary>
/// <param name="file">ファイル名</param>
/// <param name="result">
/// [true]の場合は拡張子が入る
/// [false]の場合はエラーメッセージが入る</param>
/// <returns>true/false</returns>
private bool GetExtensionFromFullPath(string file, out string result)
{
    result = "";

    try
    {
        //ファイル名がnull,空、空白のみの場合は、エラーメッセージを返す
        if (String.IsNullOrWhiteSpace(file) == true)
        {
            result = "渡されたファイル名が空です。";
            return false;
        }

        //ファイルが存在しない場合は、エラーメッセージを返す
        if (System.IO.File.Exists(file) == false)
        {
            result = "ファイルまたはパスが存在しません。";
            return false;
        }

        //ファイルの拡張子を取得
        result = System.IO.Path.GetExtension(file).ToLower();

        return true;

    }
    catch (Exception ex)
    {
        //異常が発生したときは、エラーメッセージを返す
        result = ex.Message;
        return false;
    }
}

使用例

private void GetExtNameButton_Click(object sender, EventArgs e)
{
    string result;

    //ルートパス初期化
    this.ExtensionNameTextbox.Text = "";

    if (GetExtensionFromFullPath(this.FileNameTextbox.Text, out result) == false)
    {
        //ルートパスの取得に失敗すればresultの中にはエラーメッセージが入っている
        MessageBox.Show(result);
        return;
    } 

    //ルートパスの取得に成功すればresultの中にはルートパスが入っている
    this.ExtensionNameTextbox.Text = result;
}

実行結果

まとめ

拡張子を取得するだけであればSystem.IO.Path.GetExtension関数だけでいいのですが、もし存在チェックや空文字チェックを行った後に拡張子を取得するようにしたい場合など、別の処理を追加するとなった時に修正箇所が多いと大変です。そのためあらかじめ関数化しておいて修正する箇所は少なくなるようにしましょう。

上記の例のようにあらかじめ関数にしておけば追加処理は、関数の中を修正すればすべて変更されます。

コメント

タイトルとURLをコピーしました