DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

「名前を付けて保存」ダイアログボックスを表示する

SaveFileDialogクラスを使うことにより、「名前を付けて保存」ダイアログボックスを表示させることができます。

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

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

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

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

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

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

//ダイアログを表示する
if (sfd.ShowDialog() == DialogResult.OK)
{
    //OKボタンがクリックされたとき、選択されたファイル名を表示する
    Console.WriteLine(sfd.FileName);
}
補足:InitialDirectoryプロパティには、「ドキュメント」や「ピクチャ」などのフォルダを指定する機会が多いと思います。このような特殊なフォルダのパスを取得する方法は、「特殊ディレクトリのパスを取得する」で説明しています。

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

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

VB.NET
コードを隠すコードを選択
'SaveFileDialogクラスのインスタンスを作成
Dim sfd As New SaveFileDialog()
'ダイアログを表示する
If sfd.ShowDialog() = DialogResult.OK Then
    'OKボタンがクリックされたとき、
    '選択された名前で新しいファイルを作成し、
    '読み書きアクセス許可でそのファイルを開く。
    '既存のファイルが選択されたときはデータが消える恐れあり。
    Dim stream As System.IO.Stream
    stream = sfd.OpenFile()
    If Not (stream Is Nothing) Then
        'ファイルに書き込む
        Dim sw As New System.IO.StreamWriter(stream)
        sw.Write("http://dobon.net")
        '閉じる
        sw.Close()
        stream.Close()
    End If
End If
C#
コードを隠すコードを選択
//SaveFileDialogクラスのインスタンスを作成
SaveFileDialog sfd = new SaveFileDialog();
//ダイアログを表示する
if (sfd.ShowDialog() == DialogResult.OK)
{
    //OKボタンがクリックされたとき、
    //選択された名前で新しいファイルを作成し、
    //読み書きアクセス許可でそのファイルを開く。
    //既存のファイルが選択されたときはデータが消える恐れあり。
    System.IO.Stream stream;
    stream = sfd.OpenFile();
    if (stream != null)
    {
        //ファイルに書き込む
        System.IO.StreamWriter sw = new System.IO.StreamWriter(stream);
        sw.Write("http://dobon.net");
        //閉じる
        sw.Close();
        stream.Close();
    }
}

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

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