类型' System.IO.IOException'的未处理异常发生在mscorlib.dll中

时间:2016-11-11 07:15:06

标签: vb.net

我已经多次看过这个答案,我想我知道问题是什么,但在我的情况下,解决方案对我来说毫无意义。

我收到以下错误:

    An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll

Additional information: The process cannot access the file 'C:\Users\llexl\Desktop\Test\Encrypted String.txt' because it is being used by another process.

我将代码的两部分分成了自己的按钮进行故障排除,负责创建文件的第一部分工作得很好,但是负责编辑文件并重命名它们的代码的第二部分就是当这个错误发生时对我来说没有意义,因为据我所知,System.IO.File.Create不应该被关闭。

无论如何,这里的代码给了我麻烦:

   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        TextBox2.Text = FolderBrowserDialog1.SelectedPath
        TextBox2.AppendText("\Encrypted String.txt")
        System.IO.File.Create(TextBox2.Text)


        TextBox3.Text = FolderBrowserDialog1.SelectedPath
        TextBox3.AppendText("\masterkey.txt")
        System.IO.File.Create(TextBox3.Text)

    End Sub
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim file As System.IO.StreamWriter
        Dim file2 As System.IO.StreamWriter
        file = My.Computer.FileSystem.OpenTextFileWriter(TextBox2.Text, True)

        file.Write(RichTextBox1.Text)
        file.Close()
        file2 = My.Computer.FileSystem.OpenTextFileWriter(TextBox3.Text, True)
        file2.Write(TextBox1.Text)
        file2.Close()
        My.Computer.FileSystem.RenameFile(TextBox3.Text, "masterkey.perlpron")
        My.Computer.FileSystem.RenameFile(TextBox2.Text, "Encrypted String.perlpron")
        MsgBox("Library ready", MsgBoxStyle.Information)
    End Sub

我很感激一些帮助:)

1 个答案:

答案 0 :(得分:1)

刚刚测试了这个,而File.Create方法就是造成这种行为的方法。使用它并不像你使用它一样。 Create-method打开文件流,您永远不会关闭它。

简单的解决方法是删除Create-method-call,因为如果文件不存在,OpenTextFileWriter已经创建了该文件。

所以删除行

System.IO.File.Create(TextBox2.Text)
System.IO.File.Create(TextBox3.Text)

你很高兴。

我也只是使用System.IO.StreamWriter和using-block来简化代码并确保它正确处理:

    Using file As New System.IO.StreamWriter(TextBox2.Text, True)
        file.Write(RichTextBox1.Text)
    End Using

    Using file2 As New System.IO.StreamWriter(TextBox3.Text, True)
        file2.Write(TextBox1.Text)
    End Using