FileDialog

クラス階層

  • System.ComponentModel.Component
    • System.Windows.Forms.CommonDialog
      • System.Windows.Forms.FileDialog
        • System.Windows.Forms.OpenFileDialog
        • System.Windows.Forms.SaveFileDialog
      • System.Windows.Forms.FolderBrowserDialog
継承階層 - FileDialog クラス (System.Windows.Forms) | MSDN

プロパティ

プロパティ 内容
string InitialDirectory 最初に表示されるディレクトリ
string Title ファイル ダイアログボックスのタイトル。これが空文字列ならば、「名前を付けて保存」または「開く」となる
bool RestoreDirectory trueならば、ダイアログが閉じられるときに現在のディレクトリを以前のものに復元する。falseならば現在のディレクトリが更新されるため、次回ダイアログを開いたときは最後に表示していたディレクトリが表示される。
string FileName ダイアログで選択されたファイル名。ダイアログ表示前にこれを指定すると、初期値として提示できる

ディレクトリも含めて設定するとその全体がファイル名として表示されるため、ディレクトリを指定したいならばInitialDirectoryプロパティを用いる。

string[] FileNames ダイアログで選択されたすべてのファイル名
bool AddExtension trueならば、拡張子が指定されなかったときに自動で付加する。既定はtrue
string DefaultExt 既定の拡張子
プロパティ - FileDialog クラス (System.Windows.Forms) | MSDN

InitialDirectory

値を設定しない場合は、一般的に次のパスが利用されます。FileDialog.InitialDirectory プロパティ (System.Windows.Forms) | MSDN

  • プログラムで以前に使用したパス
  • アプリケーション設定、レジストリ、文字列リソースなどの永続的なソースから読み込んだパス
  • Program Filesなどの標準的なWindowsシステムや、MyDocumentsなどのユーザーパス
  • 起動ディレクトリなど現在のアプリケーションに関連するパス

たとえばInitialDirectoryを指定せず、くり返しダイアログを開いた場合、

OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.ShowDialog();
openFileDialog.ShowDialog();

最初に何らかのファイルを選択してダイアログを閉じると、次にはそのファイルがある場所が初期ディレクトリとして表示されます。一方でファイルを選択しないでダイアログを閉じると、次も同じ場所が初期ディレクトリとして表示されます。

Filter

ダイアログに表示するファイルを制限するフィルタを指定できます。フィルタの説明とその文字列は「|」で区切り、複数のフィルタを指定する場合にはそれも「|」で区切ります。FileDialog.Filter プロパティ (System.Windows.Forms) | MSDN

Text files (*.txt)|*.txt|All files (*.*)|*.*

指定が複雑になる場合には、次のように記述するとまとまります。

string AudioFomat = "*.wav;*.mp3";
string VideoFomat = "*.avi;*.mp4";

string[] filters = new string[]
{
    string.Format( "All supported files ({0};{1})|{0};{1}", AudioFomat, VideoFomat ),
    string.Format( "Audio Files ({0})|{0}", AudioFomat ),
    string.Format( "Video Files ({0})|{0}", VideoFomat ),
    "All files (*.*)|*.*"
};

string filter = string.Join( "|", filters);

派生クラス

OpenFileDialogクラス

ユーザーにファイルを開くように促す、標準的なダイアログボックスを表示できます。

OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog.Multiselect = true;

if (openFileDialog.ShowDialog() == DialogResult.OK)
{
    string[] filenames = openFileDialog.FileNames;
}

SaveFileDialog クラス

ユーザにファイルを保存する位置を選択するように促せます。

プロパティ
プロパティ 内容 既定値
bool CreatePrompt trueならば、指定されたファイルが存在しないとき作成を確認する false
bool OverwritePrompt trueならば、指定されたファイルが存在するとき上書きを確認する true

Filterプロパティで提示したフィルタが選択されたとき、既定ではFileNameプロパティにそれが追加されます。この挙動は、AddExtensionやCheckFileExistsプロパティの設定によって異なります。

  • CheckFileExistsが、true
    • 一致するファイルがある … Filterプロパティの最初の値
    • 一致するファイルがない … DefaultExtプロパティの値
  • CheckFileExistsが、false
    • Filterプロパティに有効な拡張子がある … Filterプロパティの最初の値
    • Filterプロパティに有効な拡張子がない … DefaultExtプロパティの値
メソッド
戻り値 メソッド 機能
Stream OpenFile() FileNameプロパティの名前で、読み書き用にファイルを作成する。追記はできないため、そのような用途ではFileクラスを用いる
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "txt files (*.txt)|*.txt";

if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
    System.IO.Stream stream = saveFileDialog.OpenFile();
    if (stream != null)
    {
        //
        stream.Close();
    }
}

参考

参考書

Microsoft Learnから検索