System.Windows.Forms.SaveFileDialogクラス
System.Windows.Formsにはファイル保存ダイアログが用意されています。
サンプル
一番簡単にファイル保存ダイアログを表示するには以下のようにするとよいでしょう。
using (SaveFileDialog dlg = new SaveFileDialog())
{
//ダイアログを開く
if (dlg.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(dlg.FileName);
}
}
SaveFileDialogクラスはIDisposableインターフェースを継承しているのでusingを付けて使用後は解放することができます。もし宣言したファイル参照ダイアログクラスオブジェクトを再利用するということでなければusingを付けるべきだと考えます。
ここでファイルを選択したとしても、SaveFileDialog自身はファイルは削除をしません。

プロパティ
SaveFileDialogクラスに用意されているプロパティを設定することで、保存する拡張子やダイアログのタイトルなどいろんな設定ができるようになります。
以下に代表的になプロパティを紹介します。
| プロパティ名 | 初期値 | 説明 |
|---|---|---|
| FileName | 空文字 | ファイル名の初期値 |
| InitialDirectory | 空文字 | 初期表示フォルダの指定 |
| Filter | 空文字 | 選択可能な拡張子のフィルタ |
| FilterIndex | 1 | 初期選択フィルタの設定 |
| Title | 空文字 | ダイアログのタイトル |
| RestoreDirectory | false | ダイアログを閉じる時に現在のカレントフォルダに戻す |
こんな関数はいかがでしょうか?画像ファイル編
ファイル保存ダイアログで画像ファイルを取得する関数を作りました。
関数例
/// <summary>
/// 画像ファイル保存ダイアログ
/// </summary>
/// <param name="file_name">ファイル名(初期値/ファイル名)</param>
/// <returns>
/// true :ファイルを保存を選択した
/// false :キャンセルした
/// </returns>
private bool SaveImgFileDialog(ref string file_name)
{
//ピクチャのフォルダを指定
string picture_dir = System.Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
//フィルタの配列群
string[] img_filters = new string[]
{
"jpgファイル(*.jpg;*.jpeg)|*.jpg;*.jpeg",
"gifファイル(*.gif)|*.gif",
"tiffファイル(*.tiff)|*.tiff",
"pngファイル(*.png)|*.png",
"bmpファイル(*.bmp)|*.bmp",
"rawファイル(*.raw)|*.raw",
"svgファイル(*.svg)|*.svg",
"すべてのファイル(*.*)|*.*"
};
using (SaveFileDialog dlg = new SaveFileDialog())
{
dlg.FileName = file_name; //初期値はパラメータより
dlg.InitialDirectory = picture_dir; //初期フォルダ(マイピクチャ)
dlg.Filter = string.Join("|", img_filters); //Jpgファイルをpngファイル以外のファイルをダイアログに表示しない
dlg.FilterIndex = 1; //Filterの1つめ画像ファイルを指定
dlg.Title = "画像ファイル指定"; //タイトルを設定する
dlg.RestoreDirectory = true; //カレントディレクトリ復元
//ダイアログを開く
if (dlg.ShowDialog() != DialogResult.OK)
{
//OKが返ってこない場合は、キャンセルされたとする。
file_name = "";
return false;
}
//選択したファイル名を取得する
file_name = dlg.FileName;
return true;
}
}
使用例
private void btnSansyo_Click(object sender, EventArgs e)
{
//初期ファイル名を設定する場合はここにセットする
string file_name = "";
//画像ファイル参照ダイアログを開く、キャンセルの場合は関数から抜ける
if (SaveImgFileDialog(ref file_name) == false) return;
//取得したファイル名をテキストボックスにセットする
this.FileNameTextbox.Text = file_name;
}
実行結果

いろんなフィルタ
いろんな種類のフィルタを作成しました。お役に立てたら幸いです。
| 種類 | フィルタ |
|---|---|
| HTML/XML | HTML/XML(*.htm,*.html,*.shtml,*.mht,*.xml,*.xhtml,*.xht)|*.htm;*.html;*.shtml;*.mht;*.xml;*.xhtml;*.xht |
| テキストファイル | テキストファイル(*.txt)|*.txt |
| スタイルシート | スタイルシート(*.css,*.xsl)|*.css;*.xsl |
| スクリプト | スクリプト(*.js;*.pl;*.pm;*.cgi;*.asp;*.bat;*.sh;*.php;*.tcl;*.vbs)|*.js;*.pl;*.pm;*.cgi;*.asp;*.bat;*.sh;*.php;*.tcl;*.vbs |
| 画像 | 画像(*.jpg;*.jpeg;*.gif;*.tiff;*.png;*.bmp;*.raw;*.svg)|*.jpg;*.jpeg;*.gif;*.tiff;*.png;*.bmp;*.raw;*.svg |
| 音楽 | 音楽(*.aac; |
| 動画 | 動画(*.mp4;*.mov;*.wmv;*.avi;*.avchd;*.flv;*.f4v;*.swf;*.mkv;*.webm;*.html5;*.mpeg;*.mpg)|*.mp4;*.mov;*.wmv;*.avi;*.avchd;*.flv;*.f4v;*.swf;*.mkv;*.webm;*.html5;*.mpg;*.mpeg |
| 圧縮 | 圧縮( |
| フォント | フォント( |
まとめ
ファイル保存ダイアログを使ってダイアログを作成するときにこの記事が皆様のお役に立てたなら幸いです。


コメント