写入文件,另一个进程使用的文件

时间:2012-05-09 16:06:28

标签: vb.net visual-studio-2010 writefile

好吧,所以我无法弄清楚为什么我不能写入文件。它说它被另一个进程使用。这是错误(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

我不知道我错过了什么,因为我认为我昨天测试过它并且有效。

2 个答案:

答案 0 :(得分: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()会创建一个新文件,将指定的字符串写入该文件,然后关闭该文件。如果目标文件已存在,则会被覆盖。

答案 1 :(得分: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 / cancel按钮。

    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