DOBON.NET

「ファイルを開く」ダイアログボックスを表示する

OpenFileDialogクラスを使うことにより、「ファイルを開く」ダイアログボックスを表示させることができます。

「ファイルを開く」ダイアログボックス

OpenFileDialogクラスの簡単な使い方を以下に示します。(ここでは説明のために、ShowDialogメソッドを呼び出す前にいろいろなプロパティを設定していますが、デフォルトでよい場合は必要ありません。)

VB.NET
コードを隠すコードを選択
'OpenFileDialogクラスのインスタンスを作成
Dim ofd As New OpenFileDialog()

'はじめのファイル名を指定する
'はじめに「ファイル名」で表示される文字列を指定する
ofd.FileName = "default.html"
'はじめに表示されるフォルダを指定する
'指定しない(空の文字列)の時は、現在のディレクトリが表示される
ofd.InitialDirectory = "C:\"
'[ファイルの種類]に表示される選択肢を指定する
'指定しないとすべてのファイルが表示される
ofd.Filter = "HTMLファイル(*.html;*.htm)|*.html;*.htm|すべてのファイル(*.*)|*.*"
'[ファイルの種類]ではじめに選択されるものを指定する
'2番目の「すべてのファイル」が選択されているようにする
ofd.FilterIndex = 2
'タイトルを設定する
ofd.Title = "開くファイルを選択してください"
'ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
ofd.RestoreDirectory = True
'存在しないファイルの名前が指定されたとき警告を表示する
'デフォルトでTrueなので指定する必要はない
ofd.CheckFileExists = True
'存在しないパスが指定されたとき警告を表示する
'デフォルトでTrueなので指定する必要はない
ofd.CheckPathExists = True

'ダイアログを表示する
If ofd.ShowDialog() = DialogResult.OK Then
    'OKボタンがクリックされたとき、選択されたファイル名を表示する
    Console.WriteLine(ofd.FileName)
End If
C#
コードを隠すコードを選択
//OpenFileDialogクラスのインスタンスを作成
OpenFileDialog ofd = new OpenFileDialog();

//はじめのファイル名を指定する
//はじめに「ファイル名」で表示される文字列を指定する
ofd.FileName = "default.html";
//はじめに表示されるフォルダを指定する
//指定しない(空の文字列)の時は、現在のディレクトリが表示される
ofd.InitialDirectory = @"C:\";
//[ファイルの種類]に表示される選択肢を指定する
//指定しないとすべてのファイルが表示される
ofd.Filter = "HTMLファイル(*.html;*.htm)|*.html;*.htm|すべてのファイル(*.*)|*.*";
//[ファイルの種類]ではじめに選択されるものを指定する
//2番目の「すべてのファイル」が選択されているようにする
ofd.FilterIndex = 2;
//タイトルを設定する
ofd.Title = "開くファイルを選択してください";
//ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
ofd.RestoreDirectory = true;
//存在しないファイルの名前が指定されたとき警告を表示する
//デフォルトでTrueなので指定する必要はない
ofd.CheckFileExists = true;
//存在しないパスが指定されたとき警告を表示する
//デフォルトでTrueなので指定する必要はない
ofd.CheckPathExists = true;

//ダイアログを表示する
if (ofd.ShowDialog() == DialogResult.OK)
{
    //OKボタンがクリックされたとき、選択されたファイル名を表示する
    Console.WriteLine(ofd.FileName);
}

補足:InitialDirectoryプロパティには、「ドキュメント」や「ピクチャ」などのフォルダを指定する機会が多いと思います。このような特殊なフォルダのパスを取得する方法は、「特殊ディレクトリのパスを取得する」で説明しています。

複数のファイルを選択可能にする

複数のファイルを選択できるようにするには次のようにMultiselectプロパティをTrueにします。

VB.NET
コードを隠すコードを選択
'OpenFileDialogクラスのインスタンスを作成
Dim ofd As New OpenFileDialog()
'複数のファイルを選択できるようにする
ofd.Multiselect = True
'ダイアログを表示する
If ofd.ShowDialog() = DialogResult.OK Then
    'OKボタンがクリックされたとき、選択されたファイル名をすべて表示する
    Dim fn As String
    For Each fn In ofd.FileNames
        Console.WriteLine(fn)
    Next
End If
C#
コードを隠すコードを選択
//OpenFileDialogクラスのインスタンスを作成
OpenFileDialog ofd = new OpenFileDialog();
//複数のファイルを選択できるようにする
ofd.Multiselect = true;
//ダイアログを表示する
if (ofd.ShowDialog() == DialogResult.OK)
{
    //OKボタンがクリックされたとき、選択されたファイル名をすべて表示する
    foreach (string fn in ofd.FileNames)
    {
        Console.WriteLine(fn);
    }
}

選択されたファイルのStreamを取得する

OpenFileDialogクラスでは選択されたファイルのパスだけでなく、そのファイルのStreamも簡単に取得することができます。以下にその例を示します。

VB.NET
コードを隠すコードを選択
'OpenFileDialogクラスのインスタンスを作成
Dim ofd As New OpenFileDialog()
'ダイアログを表示する
If ofd.ShowDialog() = DialogResult.OK Then
    'OKボタンがクリックされたとき、選択されたファイルを読み取り専用で開く
    Dim stream As System.IO.Stream
    stream = ofd.OpenFile()
    If Not (stream Is Nothing) Then
        '内容を読み込み、表示する
        Dim sr As New System.IO.StreamReader(stream)
        Console.WriteLine(sr.ReadToEnd())
        '閉じる
        sr.Close()
        stream.Close()
    End If
End If
C#
コードを隠すコードを選択
//OpenFileDialogクラスのインスタンスを作成
OpenFileDialog ofd = new OpenFileDialog();
//ダイアログを表示する
if (ofd.ShowDialog() == DialogResult.OK)
{
    //OKボタンがクリックされたとき、選択されたファイルを読み取り専用で開く
    System.IO.Stream stream;
    stream = ofd.OpenFile();
    if (stream != null)
    {
        //内容を読み込み、表示する
        System.IO.StreamReader sr =
            new System.IO.StreamReader(stream);
        Console.WriteLine(sr.ReadToEnd());
        //閉じる
        sr.Close();
        stream.Close();
    }
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。