【问题标题】:Writing to file, file being used by another process写入文件,文件被另一个进程使用
【发布时间】:2012-05-09 16:06:27
【问题描述】:

好的,所以我不知道为什么我不能写入文件。它说它正在被另一个进程使用。这是错误(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

我不确定我错过了什么,因为我以为我昨天测试过它并且它有效。

【问题讨论】:

  • 那是我不知道的。我正在尝试写入一个尚未创建的文件,所以它不像我正在覆盖一个已经存在的文件,该文件可能在另一个程序(如记事本或其他程序)中打开。

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


【解决方案1】:

我想保持文件打开的进程是你自己的进程。
当您调用 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() 创建一个新文件,将指定的字符串写入文件,然后关闭文件。如果目标文件已经存在,它会被覆盖。

【讨论】:

    【解决方案2】:

    这就是我最终做的,似乎工作得很好。我取出了 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
    

    【讨论】:

    • 如果用户在 SaveDialog 上按下 Cancel 会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2017-12-02
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多