パスからファイルのある場所(フォルダ)を取得する

ファイル/フォルダ

System.IO.Path.GetDirectoryName 関数

指定したパス文字列のディレクトリ情報を返します。

つまりパラメータにファイルパスを設定することで、パスの中からフォルダ名を取得することができます。

path がルート ディレクトリを示しているか null である場合は null。
path にディレクトリ情報が含まれていない場合は、System.String.Emptyを返します。

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

サンプル

private string GetDirectoryFromFullPath(string file)
{
    //ファイルのあるフォルダを取得
    return System.IO.Path.GetDirectoryName(file);
}

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

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

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

関数例

private string GetDirectoryFromFullPath(string file)
{
    try
    {
        //ファイルの存在チェック
        if (System.IO.File.Exists(file) == false)
        {
            return "";
        }

        //フォルダ名を取得
        return System.IO.Path.GetDirectoryName(file);

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

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

使用例

//ファイル名からフォルダ名を取得する
this.DirNameTextbox.Text = GetDirectoryFromFullPath(this.FileNameTextbox.Text);

実行結果

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

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

関数例

private bool GetDirectoryFromFullPath(string file, out string dir_name)
{
    //フォルダ名の初期値は空文字にする
    dir_name = "";

    try
    {

        //ファイルが存在しない場合は、取得失敗
        if (System.IO.File.Exists(file) == false)
        {
            return false;
        }

        //フォルダ名を取得
        dir_name = System.IO.Path.GetDirectoryName(file);

        //取得成功を返す
        return true;

    }
    catch
    {
        //異常が発生したときは、エラーメッセージを返す
        return false;
    }
}

使用例

private void GetDirNameButton_Click(object sender, EventArgs e)
{
    string dir_name;

    //フォルダパスを入れるテキストボックスを初期化
    this.DirNameTextbox.Text = "";

    //フォルダ名を取得する
    if (GetDirectoryFromFullPath(this.FileNameTextbox.Text, out dir_name) == false)
    {
        MessageBox.Show("フォルダパスの取得に失敗しました。");
        return;
    }

    this.DirNameTextbox.Text = dir_name;
}

実行結果

まとめ

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

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

コメント

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