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)

此代码用于确定/取消按钮。

    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 回答