2016-11-11 185 views
0

我已经看到这个回答多次,我想我知道问题是什么,但在我的情况下,解决方案对我来说没有意义。在mscorlib.dll中发生未处理的异常类型'System.IO.IOException'

我收到以下错误:

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

我想补充一个.Dispose()来创建句子,只是以... _System.IO.File.Create(TextBox2.Text).Dispose()_ –

+0

那么,你可能知道你的程序行为方式至少有20%是错误的。您可以通过查看MSDN中的File.Create文档来使其达到100%。它是一个函数,其独特之处在于它的返回值必须从不被忽略。这不仅是缺陷,它也是一个非常糟糕的做法。如果您的程序在完成写入文件之前因任何原因而结束,那么您刚刚离开了地雷,准备在任何期望该文件包含* something *的毫无预期的程序中爆炸。不清楚你为什么要这样做,只有合理的选择是File.Delete。 –

回答

1

只是测试这和File.Create法是一个导致出现此问题。不是像你使用它一样使用它。 Create-method为文件打开一个流,你永远不会关闭它。

简单修复就是删除Create-method-call,因为如果OpenTextFileWriter不存在,OpenTextFileWriter已经创建了该文件。

所以删除线

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

,你是好去。

标识也只是用System.IO.StreamWriter用块来简化代码,以确保它的正确配置:

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 
相关问题