2017-10-08 53 views
-1

这是一个真正的头部划痕。根据所有文档,file.readAllLines应在完成后关闭正在读取的文件。但在我的应用程序中,当我尝试写入文件时,它会抛出一个IO异常,说“进程无法访问该文件,因为它正在被另一个进程使用”。这应该非常简单 - 所涉及的文件只被引用两次 - 一次在第一次启动时读入应用程序,然后覆盖它时。下面的代码:VB 2012 - StreamReader不关闭

首先,打开的文件中的代码(文件路径使用的是c:\Test\cfg.fcs):

Public Function ReadALine(ByVal File_Path As String, ByVal TotalLine As Integer, ByVal Line2Read As Integer) As String 
    Dim Buffer As Array 
    Dim Line As String 
    If TotalLine <= Line2Read Then 
     Return "No Such Line" 
    End If 
    Buffer = File.ReadAllLines(File_Path) 
    Line = Buffer(Line2Read) 

    Return Line 
End Function 

它完美,并且应该离开正常关闭的文件,对不对?但是当我稍后在另一个模块中运行以下内容时:

file = My.Computer.FileSystem.OpenTextFileWriter("c:\Test\cfg.fcs", False) 
file.WriteLine(Form1.GlobalVariables.serialNumber) 

它引发一个异常说明文件仍在使用中。这是整个应用程序中仅有的两次,该文件甚至被提及。

+0

如果您不调用第一个方法并调用_at least two times_包含最后两行的代码,会发生什么? – Steve

+0

你关闭了由OpenTextFileWriter打开的文件流吗? –

回答

0

对于遇到这个问题的其他人来说,解决方案很简单,但仍然违反直觉......问题只是命令的顺序。我将file.writeline移到了suband的底部,出于某种原因修复了它。奇怪的

+1

然后,这是一个计时问题,很可能是由[您不知道的另一部分程序](https://stackoverflow.com/a/31966611/11683)或例如[an antivirus](https://stackoverflow.com/questions/31950107/file-readalllines-quickly-followed-by-file-writealllines-causes-exception-du#comment51809843_31950107)。 – GSerg