3

アプリケーションを更新するとき、情報が保存されているテキスト ファイルから読み取る必要があります。読み取った後、「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

これから、必要なすべての情報を収集します。(これを行うにはもっと良い方法があるかもしれませんが、私はただの初心者であり、ここ、ウェブ、または友人から他のアイデアを見つけることができません。)

これらはすべて、readinf 後にファイルを閉じます (sr.close)

それを閉じていないのに何らかの理由があります。他に考えられる唯一のことは、バッチファイルが閉じていないことです。これは非常にありそうもないことです

問題は、バッチ ファイルがネットワーク情報ファイルを上書きできないため、IP を変更したりフォームを更新したりすると失敗することです。

助言がありますか?

リフレッシュ後にプロセスを強制終了する方法を考えていましたが、これが良いアイデアなのか、実行可能なのか、どうすればよいのかわかりませんでした。

4

1 に答える 1

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
于 2012-08-16T00:05:16.397 に答える