ファイルを開く・名前を付けて保存・フォルダー参照 コモンダイアログ [C#]

Windows フォームアプリの改修をしているとファイル・フォルダー関連のコモンダイアログである「ファイルを開く」「名前を付けて保存」「フォルダーの参照」を使うことが時々あります。
このファイル・フォルダー関連のコモンダイアログ、時々しか使わないのでいざ使おうとする際に、プロパティの設定値などが「あれ?これってどう設定するんだっけ…?」とか「このプロパティは初期値のままで変更しなくてもよかったっけ…?」とわからなくなることがあるので、書きとめておくことにします。

目次

ファイル選択ダイアログとフォルダー選択ダイアログ

「ファイルを開くダイアログ (OpenFileDialog) 」と「名前を付けて保存ダイアログ (SaveFileDialog) 」は、ファイルの参照をするための機能を持ったダイアログで、「フォルダーの参照ダイアログ (FolderBrowserDialog) 」は、フォルダー (ディレクトリー) を参照するための機能を持ったダイアログなので、構造が異なっています。

ファイル選択ダイアログ

「ファイルを開くダイアログ」と「名前を付けて保存ダイアログ」は共に System.Windows.Forms.FileDialog の派生クラスになっているので、メンバー (プロパティやメソッドなど) がほとんど同じになっています。
「ファイルを開くダイアログ」にはファイルを開く操作に必要なが追加されており、「名前を付けて保存ダイアログ」にはファイルを保存する操作に必要なプロパティ等が追加されています。

ファイルを開くダイアログと名前を付けて保存ダイアログのプロパティ

ファイルを開くダイアログ
OpenFileDialog
名前を付けて保存ダイアログ
SaveFileDialog
AddExtension AddExtension
AutoUpgradeEnabled AutoUpgradeEnabled
CanRaiseEvents CanRaiseEvents
CheckFileExists CheckFileExists
CheckPathExists CheckPathExists
Container Container
CreatePrompt
CustomPlaces CustomPlaces
DefaultExt DefaultExt
DereferenceLinks DereferenceLinks
DesignMode DesignMode
Events Events
FileName FileName
FileNames FileNames
Filter Filter
FilterIndex FilterIndex
InitialDirectory InitialDirectory
Instance Instance
Multiselect
Options Options
OverwritePrompt
ReadOnlyChecked
RestoreDirectory RestoreDirectory
SafeFileName
SafeFileNames
ShowHelp ShowHelp
ShowReadOnly
Site Site
SupportMultiDottedExtensions SupportMultiDottedExtensions
Tag Tag
Title Title
ValidateNames ValidateNames

ファイルを開くダイアログにのみ実装されているプロパティ

  • Multiselect
  • SafeFileName
  • SafeFileNames
  • ShowReadOnly

名前を付けて保存ダイアログにのみ実装されているプロパティ

  • CreatePrompt
  • OverwritePrompt

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

ユーザーに開くファイルのパスを選択してもらうには「ファイルを開くダイアログボックス (OpenFileDialog)」を使用します。

主なプロパティ

ファイルを開くダイアログのプロパティのうち、設定を意識する必要がありそうな主なプロパティは次の 15 種類。

プロパティ名 内容
AddExtension bool 拡張子が入力されなかった場合に、自動的に拡張子を付けるかどうかを設定する。付ける場合は「true」を、付けない場合は「false」を指定する。
既定値は「true」。
CheckFileExists bool 存在しないファイルが指定された場合に、警告メッセージを表示するかどうかを設定する。表示する場合は「true」を、表示しない場合は「false」を指定する。
既定値は「true」。
CheckPathExists bool 存在しないパスが指定された場合に、警告メッセージを表示するかどうかを設定する。表示する場合は「true」を、表示しない場合は「false」を指定する。
既定値は「true」。
FileName string ユーザーに選択されたファイルパスを取得する。ダイアログボックスの起動時に初期値として設定することも可能。
FileNames string[] ユーザーに選択された複数のファイルパスを取得する。Multiselect プロパティが「true」の場合に使用する。Multiselect プロパティが「false」の場合には FileName で取得できるファイルパスが FileNames[0] に格納される。
Filter string ファイルの種類のドロップダウンリストボックスの選択肢リストを文字列で設定する。
FilterIndex int ファイルの種類のドロップダウンリストボックスの選択肢リストの初期選択インデックスを設定する。インデックスの設定値は「0」からではなく「1」から開始。ユーザーが選択したインデックスを取得することも可能。
既定値は「1」。
InitialDirectory string ダイアログボックスの起動時に選択、表示するディレクトリー (パス) を設定する。設定したディレクトリー (パス) が存在しなくても例外は発生せず、設定しなかった場合と同じ動作となる。
Multiselect bool 複数のファイルを選択できるかどうかを設定する。複数選択を許可する場合は「true」を、許可しない場合は「false」。
既定値は「false」。
ReadOnlyChecked bool 読み取り専用として開くチェックボックスの ON/OFF を設定または取得する。ShowReadOnly プロパティが「true」の場合のみ有効となる。
既定値は「false」。
SafeFileName string ユーザーに選択された拡張子を含むファイル名のみ (パスは含まない) を取得する。
SafeFileNames string[] ユーザーに選択された複数の拡張子を含むファイル名のみ (パスは含まない) を取得する。Multiselect プロパティが「true」に設定されている場合のみ有効となる。
ShowHelp bool ヘルプボタン [?] を表示するかどうかを設定する。表示する場合は「true」を、表示しない場合は「false」を指定する。
既定値は「false」。
ShowReadOnly bool 読み取り専用として開くチェックボックスを表示するかどうかを設定する。表示する場合は「true」を、表示しない場合は「false」を指定する。
既定値は「false」。
Title string ダイアログボックスのタイトルバーに表示されるタイトル文字列を設定する。

ほぼ設定不要なプロパティ

ファイルを開くダイアログボックスで、設定が必要ない (既定値のままで OK) と思われるプロパティは次の 4 種類。

  • AddExtension
  • CheckFileExists
  • CheckPathExists
  • ShowHelp

拡張子の自動付加は必要なので既定値で OK。
ファイル、パス (フォルダー) のチェックは必要なので既定値で OK。

ファイルの種類 (Filter) の設定について

ダイアログで開くことのできるファイルの種類は Filter プロパティにフィルター文字列を設定することで指定します。
フィルター文字列は「ファイルの説明」と「ファイルのパターン (拡張子)」を縦棒 (|) で区切って表します。」
フィルター文字列の設定例

  • テキストファイルの場合

    “テキストファイル (*.txt)|*.txt”
    テキストファイルフィルター

  • XML ファイルの場合

    “XML ファイル (*.xml)|*.xml”

  • すべてのファイルの場合

    “すべてのファイル (*.*)|*.*”

1つのファイルで複数の拡張子を設定したい場合は、ファイルのパターン (拡張子) を「;」セミコロンで区切れば OK です。

  • HTML ファイルの場合

    “HTML ファイル (*.html, *.htm)|*.html;*.htm”
    HTML ファイルフィルター

  • イメージファイルの場合

    “イメージファイル (*.png, *.jpg, *.gif, *bmp)|*.png;*.jpg;*.gif;*bmp”

上記の設定では、ファイルの種類のドロップダウンリストボックスにはファイルの種類が1つしか表示されません。

ファイルの種類のドロップダウンリストボックスに複数のファイルを表示する場合は、ファイルの種類ごとのフィルター文字列 (テキストファイル (*.txt)|*.txt など) を「ファイルの説明」と「ファイルのパターン (拡張子)」を区切ったのと同じ縦棒 (|) で区切ります。

  • テキストファイルとすべてのファイルの場合

    “テキストファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*”
    テキストファイルとすべてのファイルのフィルター

  • XML ファイルと HTML ファイルとすべてのファイルの場合

    “XML ファイル (*.xml)|*.xml|HTML ファイル (*.html, *.htm)|*.html;*.htm|すべてのファイル (*.*)|*.*”
    複数ファイルのフィルター

ファイルの種類を複数設定した際に、起動時に選択するファイルの種類を指定する場合は FilterIndex プロパティにインデックス値を指定します。
リストの先頭の項目 (アイテム) なら「1」を、2番目の項目なら「2」を設定します。(インデックスですが、「0」からではなく「1」からスタートなので注意!)
FilterIndex プロパティの既定値は「1」なので、起動時に選択させるファイルの種類を Filter プロパティに設定するフィルター文字列の最初に記述する場合は、FilterIndex プロパティの設定は不要になります。
ユーザーが選択したファイルの種類を保持しておき、次回に選択するファイルの種類を設定する場合などには便利なプロパティです。

複数のファイルを一括で開けるようにする

ユーザーが複数のファイルを一度に開くことができるようにするには Multiselect プロパティを「true」に設定します。
ユーザーが選択した複数のファイルは FileNames プロパティまたは SafeFileNames プロパティで取得します。

ファイルを読み取り専用で開けるようにする

ユーザーが読み書き可能 or 読み取り専用のいずれかでファイルを開くことができるようにするには ShowReadOnly プロパティを「true」に設定します。
ユーザーにできる限り読み取り専用で開いて欲しい場合や、基本的に読み取り専用でファイルを開いた方がユーザーにとって親切な場合など、「読み取り専用ファイルとして開く」チェックボックスをダイアログの起動時に ON にしたい場合は ReadOnlyChecked プロパティを「true」に設定します。

読み取り専用ファイルとして開く

起動時に選択、表示するディレクトリー (パス) を指定する

ファイルを開くディレクトリー (パス) が予め決まっている場合や、起動時にディレクトリー (パス) を限定した方がユーザーにとって使い勝手が良い場合には InitialDirectory プロパティにディレクトリーのパスを設定します。
(FileName プロパティにファイルパスを設定しても、ファイルパスのディレクトリーを初期表示はしてくれないので注意!必ず InitialDirectory プロパティで設定する。)

ファイルを開くダイアログのサンプル

ファイルを開くダイアログサンプル
テキストボックス (textBox1) と、ファイルを参照するボタン (button1) が配置されたフォームから、ファイルを開くダイアログボックスを表示して、選択されたファイル名 (ファイルパス) をテキストボックスに表示します。

名前を付けて保存ダイアログボックス
SaveFileDialog

ユーザーに保存するファイルのパスを選択してもらうには「名前を付けて保存ダイアログボックス (SaveFileDialog)」を使用します。

主なプロパティ

名前を付けて保存ダイアログのプロパティのうち、設定を意識する必要がありそうな主なプロパティは次の 11 種類。

プロパティ名 内容
AddExtension bool 拡張子が入力されなかった場合に、自動的に拡張子を付けるかどうかを設定する。付ける場合は「true」を、付けない場合は「false」を指定する。
既定値は「true」。
CheckFileExists bool 存在しないファイルが指定された場合に、警告メッセージを表示するかどうかを設定する。表示する場合は「true」を、表示しない場合は「false」を指定する。
既定値は「false」。
CheckPathExists bool 存在しないパスが指定された場合に、警告メッセージを表示するかどうかを設定する。表示する場合は「true」を、表示しない場合は「false」を指定する。
既定値は「true」。
FileName string ユーザーに選択されたファイルパスを取得する。ダイアログボックスの起動時に初期値として設定することも可能。
Filter string[] ファイルの種類のドロップダウンリストボックスの選択肢リストを文字列で設定する。
FilterIndex int ファイルの種類のドロップダウンリストボックスの選択肢リストの初期選択インデックスを設定する。インデックスの設定値は「0」からではなく「1」から開始。ユーザーが選択したインデックスを取得することも可能。
既定値は「1」。
InitialDirectory string ダイアログボックスの起動時に選択、表示するディレクトリー (パス) を設定する。設定したディレクトリー (パス) が存在しなくても例外は発生せず、設定しなかった場合と同じ動作となる。
OverwritePrompt bool ユーザーが既に存在するパスを選択した場合に警告メッセージを表示するかどうかを設定する。表示する場合は「true」を、表示しない場合は「false」を指定する。
既定値は「true」。
RestoreDirectory bool ダイアログボックスを閉じる前に、ディレクトリ (フォルダー) を前に選択されていたディレクトリ (フォルダー) に戻すかどうかをを取得する。戻す場合は「true」を、戻さない場合は「false」を設定する。
既定値は「false」。
ShowHelp bool ヘルプボタン [?] を表示するかどうかを設定する。表示する場合は「true」を、表示しない場合は「false」を指定する。
既定値は「false」。
Title string ダイアログボックスのタイトルバーに表示されるタイトル文字列を設定する。

ほぼ設定不要なプロパティ

名前を付けて保存ダイアログボックスで、設定が必要ない (既定値のままで OK) と思われるプロパティは次の 5 種類。

  • AddExtension
  • CheckFileExists
  • CheckPathExists
  • OverwritePrompt
  • ShowHelp

拡張子の自動付加は必要なので既定値で OK。
ファイルのチェックは不要なので既定値で OK。
パス (フォルダー) のチェックは必要なので既定値で OK。
ファイルが存在する場合の上書き確認は必要なので既定値で OK。

プロパティの設定等について

ファイルを開くダイアログとほとんど同じです。
名前を付けて保存ダイアログは、ファイルを開く場合と違って、複数ファイルの選択可否の設定や、読み取り専用の設定がない分、ファイルを開くダイアログよりも設定が必要なプロパティは少なくなっています。
ファイルを保存する際に気にした方が良さげなプロパティは、ファイルの上書き確認の OverwritePrompt プロパティぐらいですが、既定値が「true」なので、特に気にかける必要はないでしょう。

名前を付けて保存ダイアログの OpenFile メソッド

名前を付けて保存ダイアログにはファイルを開くダイアログにはないメソッドが実装されています。
OpenFile メソッドを使用すると、ユーザーが選択したファイルの Stream オブジェクトへの参照を取得できるので、ファイルの保存処理に使えますが FileName プロパティからファイル名を取得してファイルの保存を行った方が安全、且つ融通が利くので特に使う必要はないでしょう。

名前を付けて保存ダイアログのサンプル

名前を付けて保存するダイアログサンプル
テキストボックス (textBox1) と、ファイルを参照するボタン (button1) が配置されたフォームから、名前を付けて保存ダイアログボックスを表示して、選択されたファイル名 (ファイルパス) をテキストボックスに表示します。

フォルダー選択ダイアログ

「フォルダーの参照ダイアログ」は System.Windows.Forms.CommonDialog の派生クラスになっているのでファイル選択ダイアログとはメンバーの構成が全く違います。
フォルダーを参照するダイアログはファイルを参照するダイアログに比べると設定するプロパティは少なくなります。

フォルダーの参照ダイアログボックス
FolderBrowserDialog

ユーザーにフォルダーのパスを選択してもらうには「フォルダーの参照ダイアログボックス (FolderBrowserDialog)」を使用します。

主なプロパティ

名前を付けて保存ダイアログのプロパティのうち、設定を意識する必要がありそうな主なプロパティは次の 4 種類。

プロパティ名 内容
Description string ダイアログボックスのフォルダーツリービューの上部に表示する説明文を設定する。
RootFolder SpecialFolder ※ ダイアログボックスのフォルダーツリービューのルートノード (先頭のノード) として設定するフォルダーを SpecialFolder 列挙体で設定する。
SelectedPath string
ShowNewFolderButton bool 新しいフォルダーを作成するボタンを表示するかどうかを設定する。表示する場合は「true」を、表示しない場合は「false」を指定する。
既定値は「true」。

※ System.Environment.SpecialFolder

ほぼ設定不要なプロパティ

フォルダーの参照ダイアログボックスで、設定が必要ない (既定値のままで OK) と思われるプロパティは次の 1 種類。

  • ShowNewFolderButton

新しいフォルダーを作成するボタンは、ある方がユーザーに対して親切なので既定値で OK。

ユーザーに参照するフォルダーについての説明文を表示する

Description プロパティを設定することで、フォルダーを参照する目的などをユーザーに説明することができます。
説明文はフォルダーツリービューの上部に表示されます。

フォルダーの参照ダイアログの説明

説明文が長い場合は自動で折り返して表示されます。

フォルダーの参照ダイアログの説明

説明文は改行を挿入して複数行設定こともできます。

フォルダーの参照ダイアログの説明
3 行まで表示されます。4 行目以降は表示されません。

特定のフォルダーおよびサブフォルダーのみ選択可能に設定する

ユーザーが参照可能なフォルダーを限定させたい場合などに RootFolder プロパティを設定することで、特定のフォルダーとサブフォルダーのみをユーザーに選択させることができます。
ネットワーク等のフォルダーを選択させたくない場合に、コンピューター (マイコンピューター) を表す System.Environment.SpecialFolder.MyComputer を設定すれば、コンピューター内のローカルフォルダーのみがフォルダーツリービューで選択可能になります。

フォルダーの参照ダイアログのルートフォルダーをマイコンピューターに設定

フォルダーの参照ダイアログのサンプル

フォルダーの参照ダイアログサンプル
テキストボックス (textBox1) と、フォルダーを参照するボタン (button1) が配置されたフォームから、フォルダーの参照ダイアログボックスを表示して、選択されたフォルダーパスをテキストボックスに表示します。