質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

9175閲覧

vb.net 上書き保存機能をつけたい

_ali

総合スコア14

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/09/21 08:45

いつもお世話になっております。

現在、VB.NETでメモ帳を作成しております。
メモ帳の機能で上書き保存をつけたいのですが、うまくいきません。

調べたところ、ファイルパスが必要そうだということはわかりました。
ファイルパスをどこから取得したら良いのかがわかりません。

また、上書き保存をクリックした時にファイルが存在すれば、そのまま保存。
存在しなければ、名前をつけて保存機能を出す。と、いうように判断したいです。
その判断はファイル名を検索を検索することで行うのでしょうか。

容量を得ていない質問かもしれませんが、よろしくお願い致します。
↓名前をつけて保存のソース

vb

1''' <summary> 2 ''' ファイル->名前をつけて保存をクリックしたら 3 ''' </summary> 4 Friend Sub mimNsave_Click() Handles mimNsave.Click 5 6 Dim sfd As New SaveFileDialog() 'SaveFileDialogの新しいインスタンスを作成 7 8 '初期表示するディレクトリを設定 9 sfd.InitialDirectory = "C:\" 10 11 'ファイルのフィルタ設定 12 sfd.Filter = "テキストファイル|*.txt;*.log|すべてのファイル|*.*" 13 14 'ファイルの種類の初期設定 15 sfd.FilterIndex = 2 16 17 '初期表示するファイル名の設定 18 sfd.FileName = "新しいファイル.txt" 19 20 'ダイアログを表示 保存するが選ばれたら 21 If sfd.ShowDialog() = Windows.Forms.DialogResult.OK Then 22 23 Dim stream As System.IO.Stream 'streamのインスタンスを作成 24 25 stream = sfd.OpenFile() 26 27 If Not (stream Is Nothing) Then 28 29 Dim sw As New System.IO.StreamWriter(stream) 30 31 'テキストエリアの内容を書き込み 32 sw.Write(txtArea.Text) 33 34 '閉じる 35 sw.Close() 36 stream.Close() 37 38 End If 39 40 End If 41 42 43 End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

良く分からないのですが、このコードで、指定されたファイルがあれば上書き、なければ名前欄に書かれたファイル名で保存が実現できているのではないかと思うのですが、いかがでしょう?

提示されたサンプルではダイアログからstreamを取得しているので、ファイルパスを別に取得する必要はないように思えます。

また

vb.net

1sfd.OverwritePrompt = true; 2sfd.CreatePrompt = true;

とすると、存在するファイル名のとき、上書きするかのダイアログや、存在しないファイル名のとき新規作成するかのダイアログを、.netの機能で出してもらうように設定できます

参考

投稿2018/09/21 08:56

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_ali

2018/09/21 11:04

丁寧な回答ありがとうございます。 つまり、上書き保存の機能としては名前をつけて保存機能と同じ事が行われているという認識でよいのでしょうか。
Takumiboo

2018/09/25 00:25

プログラムの設計次第だとは思いますが、「名前をつけて保存」→ダイアログを表示して保存先を指定、同名のファイルを指定(=上書き保存)することもできる、「上書き保存」→すでに開いているファイルを上書き、もしファイルを開いていなければ「名前をつけて保存」する、というのが一般的だと思われます。実際の保存の部分は共通の動きになることが多いと思います。
guest

0

https://dobon.net/vb/dotnet/form/openfiledialog.html
https://dobon.net/vb/dotnet/form/savefiledialog.html

「上書き保存」ということは、すでに何かしらのファイルを開いている、もしくは一度「名前を付けて保存」している状態かと思います。
上記サイトのように、FileNameプロパティにファイル名が格納されているため、上書きの場合はそのファイルの存在を確認すればいいのではないでしょうか。

投稿2018/09/21 08:54

Takumiboo

総合スコア2534

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/09/21 09:01

質問者さんに誤解のないように補足します(参考サイトを見ても判然としないので) sfd.FileNameはフルパスが格納されます。なのでそのままFile.Existなどの引数として使えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問