VB.NETにおける、ダイアログを使ってファイルを保存する方法です。
ファイルダイアログ自体はダイアログを表示するだけで、実際にファイルを開くわけではありません。実際にファイルの保存は、ファイル操作ライブラリを使う必要があります。本記事ではストリームを使ってファイルに書き込んで保存する方法も合わせて紹介します。
ファイルを保存するダイアログ
VB.NETにおいて、ファイルを保存するダイアログを使う場合は SaveFileDialog クラスを使用します。
ファイルを開くダイアログを表示する際は、
- ダイアログのインスタンス生成
- 各種プロパティを設定(省略可)
- ShowDialog メソッドでダイアログ表示
という流れでコーディングします。各種プロパティの設定は任意のため、必要がある場合にプロパティを設定しましょう。
実行確認様に簡単な画面を作成しました。
- 上のテキストボックス…開いたファイルのパスを表示(別記事で解説)
- ファイルを開くボタン…ファイルを開くダイアログを表示(別記事で解説)
- 下のテキストボックス…ファイル保存するためのテキスト入力(本記事で解説)
- ファイルを保存ボタン…ファイルを保存するダイアログを表示(本記事で解説)
この画面を使ってファイルを開くダイアログの動作を確認します。
実装
ファイルを保存するダイアログを表示させる方法は、SaveFileDialog を使えば、次のコードで可能です。
'SaveFileDialogのインスタンス作成 Dim objSFD As New SaveFileDialog() 'ダイアログを表示 If objSFD.ShowDialog() = DialogResult.OK Then MessageBox.Show("ファイルを保存しました。") End If
最低限はこのコードだけで問題ありません。
実際にダイアログを表示しているのは、ShowDialog メソッドです。「名前を付けて保存」というダイアログが表示されますが、これだけではファイルは保存されません。
ダイアログ上の「保存」ボタンが押された場合、ShowDialog メソッドの戻り値は DialogResult.OK となります。
サンプルコードはこちら。
Private Sub cmdSaveFile_Click(sender As Object, e As EventArgs) Handles cmdSaveFile.Click 'SaveFileDialogのインスタンス作成 Dim objSFD As New SaveFileDialog() 'ダイアログを表示 If objSFD.ShowDialog() = DialogResult.OK Then MessageBox.Show(objSFD.FileName) End If End Sub
動作確認用のため、ファイルの保存は出来ませんが、保存先のファイルパスを取得できていることが分かります。
これが保存のダイアログ。ShowDialog メソッドを呼び出すと表示されます。
保存ボタンを押すと、ファイルの保存はされませんが、保存対象となるファイルパスを取得することが出来ます。
ファイルを保存するダイアログのプロパティを設定する
先ほどのサンプルコードだと、とりあえずファイルダイアログを表示させているだけなので、SaveFileDialog のインスタンス生成後、プロパティを設定して使いやすい様に設定します。
そのシーンによってプロパティをどのように設定するかは様々ですが、よく使うプロパティは以下になります。
Private Sub cmdSaveFile_Click(sender As Object, e As EventArgs) Handles cmdSaveFile.Click 'SaveFileDialogのインスタンス作成 Dim objSFD As New SaveFileDialog() 'ファイルダイアログのウィンドウタイトル objSFD.Title = "ファイルを選択" 'ダイアログ初期表示のディレクトリを指定 objSFD.InitialDirectory = "D:\temp\" 'ファイルの種類に表示される拡張子を指定 objSFD.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" 'ファイルの種類のリストで初期表示されるものを指定(規定は1) objSFD.FilterIndex = 2 '前回開いたディレクトリを復元(ただし、InitialDirectoryが優先される) objSFD.RestoreDirectory = True 'ダイアログを表示 If objSFD.ShowDialog() = DialogResult.OK Then MessageBox.Show(objSFD.FileName) End If End Sub
ファイルダイアログ自体は、保存先と指定したファイルのパスを取得することが目的なので、そこまでゴリゴリにファイルダイアログのプロパティを指定する必要はありません。明確な仕様が無ければ、ユーザーライクなプロパティを設定した方が良いでしょう。
実際にファイルを保存する場合
SavepenFileDialog クラスで出来ることは、ファイルダイアログを使ってファイルパスを取得することなので、ファイルの中身を確認したい場合は、別途、ファイル保存等を行う必要があります。
例えば、画面上に入力した内容をテキストファイルに書き出したい場合、System.IO.StreamWriter クラスを使ってファイルを書き出す必要があります。
サンプルコードはこちら。
Private Sub cmdSaveFile_Click(sender As Object, e As EventArgs) Handles cmdSaveFile.Click 'SaveFileDialogのインスタンス作成 Dim objSFD As New SaveFileDialog() 'ファイルダイアログのウィンドウタイトル objSFD.Title = "ファイルを選択" 'ダイアログ初期表示のディレクトリを指定 objSFD.InitialDirectory = "D:\temp\" 'ファイルの種類に表示される拡張子を指定 objSFD.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" 'ファイルの種類のリストで初期表示されるものを指定(規定は1) objSFD.FilterIndex = 2 '前回開いたディレクトリを復元(ただし、InitialDirectoryが優先される) objSFD.RestoreDirectory = True 'ダイアログを表示 If objSFD.ShowDialog() = DialogResult.OK Then 'StreamWriterのインスタンス生成 Using objSW As New System.IO.StreamWriter(objSFD.FileName, False, System.Text.Encoding.GetEncoding("shift_jis")) 'テキストボックスの内容をファイルに書き込み書き込み objSW.WriteLine(txtOutput.Text) End Using MessageBox.Show("ファイルを保存しました。") End If End Sub
ファイルダイアログで保存先を指定し、StreamWriter で画面に入力した内容をテキストファイルに書き出すだけの簡単なサンプルです。
先述しましたが、ファイルダイアログではファイルパスを取得することが目的のため、ファイルに書き込みたい場合は、StreamWriter など、別途ファイルに書き込むコードを書く必要があります。
参考リンク
SaveFileDialog クラス (System.Windows.Forms) | Microsoft Docs
関連記事
.