Windows Vb.net在读取文件后未关闭该文件

Windows Vb.net在读取文件后未关闭该文件,windows,vb.net,streamreader,Windows,Vb.net,Streamreader,当刷新我的应用程序时,我必须读取一个文本文件,该文件中存储有信息。读取后,我确保已将其关闭“file.close()”,下次刷新应用程序时,应再次生成文本文件并覆盖上一个文件 问题是,它无法更改文件,因为另一个进程正在使用它,但只要我关闭应用程序,它就可以正常工作。是否在刷新进程之前停止进程,使其正常工作?文本文件名为NetworkInfo.txt 谢谢 克里斯 编辑 每次刷新应用程序时,我都会运行一个批处理文件,生成一个包含所有网络信息的文件。(IPConfig/all) 然后我有一个模块,从

当刷新我的应用程序时,我必须读取一个文本文件,该文件中存储有信息。读取后,我确保已将其关闭“file.close()”,下次刷新应用程序时,应再次生成文本文件并覆盖上一个文件

问题是,它无法更改文件,因为另一个进程正在使用它,但只要我关闭应用程序,它就可以正常工作。是否在刷新进程之前停止进程,使其正常工作?文本文件名为NetworkInfo.txt

谢谢 克里斯

编辑

每次刷新应用程序时,我都会运行一个批处理文件,生成一个包含所有网络信息的文件。(IPConfig/all)

然后我有一个模块,从中读取如下内容:

Public Function EthDefaultGateway() As String
    Dim sr As New System.IO.StreamReader(ipconfig)
    Try

        Dim foundEthernet As Boolean = False
        Dim gateway As String = ""

        Do Until sr.EndOfStream
            Dim line As String = sr.ReadLine()

            If line.Contains("Ethernet adapter LAN:") OrElse line.Contains("Ethernet adapter Local Area Connection:") Then
                foundEthernet = True
            End If

            If foundEthernet Then
                If line.Contains("Default Gateway . . . . . . . . . :") Then
                    gateway = line.Substring(line.IndexOf(":") + 1).Trim
                    Exit Do
                End If
            End If
        Loop

        If gateway = "" Then
            gateway = "Unknown"
        End If
        If gateway = "::" Then
            gateway = "Unknown"
        End If
        Return gateway
    Catch ex As Exception
        EthDefaultGateway = "Unknown"
    End Try
    sr.Close()
    sr.Dispose()
End Function
从这里我收集了我需要的所有信息。(有很多更好的方法可以做到这一点,但我只是一个普通人,我在这里、网上或朋友那里找不到任何其他想法。)

所有这些在从文件中读取INF后关闭文件(sr.close)

有些原因,虽然它没有关闭它。唯一的另一个可能是批处理文件没有关闭它,我认为这是非常不可能的

问题是,当我更改IP或刷新表单时,它会失败,因为批处理文件无法覆盖网络信息文件

有什么建议吗

我只是想在刷新后终止进程,但我不知道这是不是一个好主意,是否可行,或者如何完成

    Return gateway
这绕过了底部的sr.Close()调用。所以文件不会被关闭。始终支持使用using语句,以便它是自动的,并且不会因为异常而被忘记、跳过或绕过:

Public Function EthDefaultGateway() As String
    Using sr As New System.IO.StreamReader(ipconfig)
       '' Rest of your code
    End Using
End Function

你能发一些代码吗?当我们看不到你在做什么时,很难给出答案。听起来您没有正确处理流,但是如果没有任何代码,就很难说了。很抱歉没有发布代码:P
应该再次生成文本文件,并覆盖上一个文件
我认为我们可能也需要查看此代码。
sr.close()
仅关闭文件;它不会释放
StreamReader
,因此它将被保留,直到GC(垃圾收集)将其清除。关闭后将
sr
设置为nothing-不是一个vb.net的家伙,所以我不会发布一个说明如何操作的答案。在C#中,您可以使用块将代码放入一个
中,以自动处理流,但我不确定您在vb.net中如何执行相同的操作。您需要将
返回网关
移动到
sr.dispose()
之后-在它到达关闭和处理StreamReader的部分之前,您将从函数返回。+1。这将处理Dispose()问题和提前返回。谢谢。在与代码和安装程序闲聊之后,我成功地杀死了程序哈哈。很好,我有备份:我会在我再次运行它之前给它。看来它能解决问题。(奇怪的是,我使用的是我的一个旧备份。变化很小,但问题没有发生。以相同的方式从同一个文件中查找信息,但仍然没有错误。无论哪种方式。将是一个好主意来修复此问题。再次感谢