お世話になります。
現在VB.NETでwinアプリを作成しております。
フォーム上にボタンとテキストボックスがあり、
ボタンを押したらテキストファイルが作成され
テキストボックス上の内容がテキストファイルに
書き込まれるようにし、そのテキストファイルを
開いて表示させるようにし、ユーザーがテキストファイルを
閉じたらファイルも削除されるようにしたいと考えてますが
よい方法が見つかりません。
現在考えたのが下記の方法です。
Dim fs1 As New StreamWriter("c:\test.txt", True, System.Text.Encoding.Default)
fs1.WriteLine(TextBox1.Text)
fs1.Close()
Dim p As System.Diagnostics.Process = _
System.Diagnostics.Process.Start("c:\test.txt")
p.WaitForExit()
Kill("c:\test.txt")
これですと最後にファイルを削除するところで
エラーになります。
何かよい方法はありますでしょうか。
ボクの環境では何度やってもエラー出ませんが?
[Win2000(sp4) VB.NET2002]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim wFilePath As String = "c:\data\コピー 〜 test.txt"
Dim fs1 As New StreamWriter(wFilePath, True, System.Text.Encoding.Default)
fs1.WriteLine(TextBox1.Text)
fs1.Close()
Dim p As System.Diagnostics.Process = _
System.Diagnostics.Process.Start(wFilePath)
p.WaitForExit()
Kill(wFilePath)
End Sub
ちなみにエラーの内容は?質問するならそれが重要だと思う
んですけど(^^;)
特攻隊長まるるう様
ご助言ありがとうございます。
エラーメッセージを入れるのを忘れていました、申し訳ありません。
エラーは以下のとおりです。
'System.NullReferenceException' のハンドルされていない例外が showtext.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
アドバイスいただいたようなソースにしても
同じエラーになりました。
またエラーの場所が表示されないので
どこでおかしいのかもわからず困っております。
何かアドバイスがございましたらお願いいたします。
連続ですみません。
無事実行できました。
(ただ先ほど実行したプログラムから
何も修正していないのに急に動くように
なったので少々すっきりしてませんが・・・)
また、先ほど作成したのはtxtファイルですが
今度はhtmlファイルにすると上記と同じ
エラーが発生してしまいました。
txtのようにファイルを開くまではいくのですが
開いてからすぐにエラーのポップアップが
表示されてしまいます。
(ファイルは開かれたままです)
何かご存知の方、どうぞアドバイスお願いします。
>またエラーの場所が表示されないので
>'System.NullReferenceException' のハンドルされていない例外が showtext.exe で発生しました。
表示されましたよ?EXE のダブルクリックから実行してるんですか?
>(ただ先ほど実行したプログラムから
>何も修正していないのに急に動くように
>なったので少々すっきりしてませんが・・・)
実行の仕方が悪いような気がします…
VB.NETのメニューバーで[ビルド]-[構成マネージャ]はすべて
Debug 指定(Release は最終的に納品する時に選んでください)。
[デバッグ]-[開始]で実行して下さい。
System.Diagnostics.Process.Start が完全に成功しなかった
時に出るようですね。
その場合、p が作成されず、Nothing のままなので、
p.WaitForExit()
を実行した時点でオブジェクトが実体化していないという意味の
>追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
となります。
Process.Start でなんとかファイルの起動だけは成功してたり
するので
>txtのようにファイルを開くまではいくのですが
>開いてからすぐにエラーのポップアップが
>表示されてしまいます。
となるようです。
詳しいことはまだ分かりませんが、html ファイルの
場合は
[VB.NET]
' 省略
Dim p As System.Diagnostics.Process = _
System.Diagnostics.Process.Start("IExplore.exe", wFilePath)
If p Is Nothing Then
MessageBox.Show("オブジェクトの生成と取得に失敗しました。")
Exit Sub
End If
p.WaitForExit()
' 省略
でどうでしょう?
あー。Process.Start メソッドのヘルプに書いてありますね。
多分これでしょう。
>プロセスが既に実行されている場合、追加のプロセス リソースは
>起動されません。代わりに、既存のプロセス リソースが再利用され、
>新しい Process コンポーネントは作成されません。この場合、
>新しい Process コンポーネントが返される代わりに、
>Start は呼び出し元のプロシージャに null 参照
>(Visual Basic では Nothing) を返します。
とりあえず、他に同じ拡張子のファイルを開かずに、最初の
質問のコードで実行してみて下さい。
If p Is Nothing Then
MessageBox.Show("なんかファイル開いてます?")
Exit Sub
End If
くらいは付けておいてもいいかも?。
特攻隊長まるるう様
詳細にご説明くださり本当にありがとうございます。
アドバイスのおかげで無事成功することが
できました。
またエラーの原因も理解できましたので
本当に助かりました。
今回は本当にお世話になりました。
ありがとうございました。