2

了解しました。ファイルに書き込めない理由がわかりません。別のプロセスで使用されていると表示されます。エラーは次のとおりです(IOExceptionは処理されませんでした):

The process cannot access the file 'C:\Temp\TempFile.cfg' because it is being used by another process.

ファイルへの書き込みに使用している現在のコードは次のとおりです。

Dim myConfig
    Dim saveFileDialog1 As New SaveFileDialog()

    saveFileDialog1.Filter = "Configuration Files (*.cfg)|*.cfg"
    saveFileDialog1.FilterIndex = 2
    saveFileDialog1.RestoreDirectory = True

    If saveFileDialog1.ShowDialog() = DialogResult.OK Then
        myConfig = saveFileDialog1.OpenFile()
        If (myConfig IsNot Nothing) Then
            System.IO.File.WriteAllText(saveFileDialog1.FileName, TextBox1_Output_Module.Text & vbCrLf & TextBox2_Output_Module.Text & vbCrLf & TextBox3_Output_Module.Text)
            myConfig.Close()
        End If
    End If

昨日これをテストしたと思っていたので、何が欠けているのかわかりませんが、うまくいきました。

4

2 に答える 2

3

ファイルを開いたままにするプロセスはあなた自身のプロセスだと思います。
saveDialog1.OpenFile()を呼び出すと、ファイルが開かれ、ストリームが返されます。
次に、WriteAllText()を呼び出して、同じファイルを再度開こうとすると、上記の例外が発生します。
OpenFile()の呼び出しを削除するだけで解決できます

   If saveFileDialog1.ShowDialog() = DialogResult.OK Then 
       File.WriteAllText(saveFileDialog1.FileName, TextBox1_Output_Module.Text & vbCrLf & TextBox2_Output_Module.Text & vbCrLf & TextBox3_Output_Module.Text) 
   End If 

WriteAllText()は新しいファイルを作成し、指定された文字列をファイルに書き込んでから、ファイルを閉じることに注意してください。ターゲットファイルがすでに存在する場合は、上書きされます。

于 2012-05-09T19:58:51.550 に答える
1

さて、これが私がやったことです、そのままでうまく機能しているようです。if条件を取り出し、それ以外はすべてそのままにしました。後でいつでもキャンセルのコードを書くことができます。

    Dim myConfig
    Dim saveFileDialog1 As New SaveFileDialog()

    saveFileDialog1.Filter = "Configuration Files (*.cfg)|*.cfg"
    saveFileDialog1.FilterIndex = 2
    saveFileDialog1.RestoreDirectory = True

    System.IO.File.WriteAllText(saveFileDialog1.FileName, TextBox1_Output_Module.Text & vbCrLf & TextBox2_Output_Module.Text & vbCrLf & TextBox3_Output_Module.Text)

これは、[OK]/[キャンセル]ボタンのコードです。

    If saveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
        System.IO.File.WriteAllText(saveFileDialog1.FileName, TextBox1_Output_Module.Text & vbCrLf & TextBox2_Output_Module.Text & vbCrLf & TextBox3_Output_Module.Text)
    End If
于 2012-05-09T17:50:46.190 に答える