use*_*772 3 vb.net windows 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
Run Code Online (Sandbox Code Playgroud)
从中我收集了所需的所有信息.(有probs是一个更好的方法,但我只是一个小说,我不能在这里,网络或朋友找到任何其他的想法.)
所有这些都在readinf之后关闭文件(sr.close)
有些原因虽然没有关闭它.唯一的另一件事可能是批处理文件没有关闭它,我认为这是不太可能的
问题是,当我更改IP或刷新表单时,它会失败,因为批处理文件无法覆盖网络信息文件.
有什么建议?
我只是想在刷新后想办法杀死这个过程,但我不知道这是不是一个好主意,或者它是否可行或如何做到这一点.
Return gateway
Run Code Online (Sandbox Code Playgroud)
绕过底部的sr.Close()调用.因此该文件不会被关闭.总是喜欢使用Using语句,因此它是自动的,不会因为异常而被遗忘,跳过或绕过:
Public Function EthDefaultGateway() As String
Using sr As New System.IO.StreamReader(ipconfig)
'' Rest of your code
End Using
End Function
Run Code Online (Sandbox Code Playgroud)