Vb.net从中读取后没有关闭文件

时间:2012-08-15 22:37:42

标签: windows vb.net streamreader

刷新我的应用程序时,我必须从一个存储有信息的文本文件中读取。阅读完毕后,我确保已将其关闭' 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

从这里我收集了我需要的所有信息。 (有probs是一个更好的方法,但我只是一个小说,我无法在这里,网络或朋友找到任何其他的想法。)

所有这些都在从readinf(sr.close)

后关闭文件

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

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

有什么建议吗?

我只是在考虑一种在刷新后杀死进程的方法,但我不知道这是不是一个好主意,或者它是否可行或如何做到这一点。

1 个答案:

答案 0 :(得分:5)

    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