나를 도울 수 있기를 바랍니다. 난 서버에서 XML 파일을 다운로드를 기반으로 프로그램 updater를 구축하려고 해요.VB.net XMLTextReader IO 예외 : "다른 프로세스에서 사용중인 파일"
서버 XML 파일에 현재 버전 번호와 설치 관리자 위치가 포함되어 있습니다. 업데이트 프로그램이 시작 폴더에 덤프되거나 서비스 등으로 설치됩니다.
프로그램이 현재 버전의 xml 파일을 성공적으로 읽고 구문 분석하여 서버에서 xml 파일을 성공적으로 다운로드합니다. 그러나 서버에서 새로 다운로드 한 파일을 구문 분석하려고하면 오류가 발생합니다.
'IOException 처리되지 않은' '프로세스가'C : \ Program Files (x86) \ Test \ ServerVersion.xml 파일에 액세스 할 수 없습니다. '다른 프로세스에서 사용 중이기 때문입니다.'
내가 알고있는 한, 이것이 프로그램 외부와 프로그램 내에서 발생하지 않는다는 것을 알고있는 한, 나는 사용하기 전에 그것에 접근 할 수있는 요소를 모두 삭제했다. 나는 바보 같은 일을 했습니까, 아니면 올바르게 처신하지 않았습니까? 라인 (52)에 주석으로 표시 오류와 함께 다음과 같이
코드는 다음과 같습니다
Imports System.IO
Imports System.Xml.XmlTextReader
Imports System.Net
Module Module1
Sub Main()
Dim currentreader As Xml.XmlTextReader
Dim serverreader As Xml.XmlTextReader
Dim download As New WebClient
Dim Version
Dim Versionlocation
Dim ServerVersion
Dim Serverlocation
Dim Failure As Boolean = False ' Will be used for retrys in the future'
download = New WebClient
Try
If Not (System.IO.File.Exists("C:\Program Files (x86)\Test\ServerVersion")) Then
download.DownloadFileAsync(New Uri("http://192.168.2.226/SampleApp_ServerSetup/UpdateVersion.xml"), "C:\Program Files (x86)\Test\ServerVersion.xml")
download.Dispose()
End If
Catch ex As Exception
Failure = True
Console.WriteLine("error" & ex.Message)
End Try
currentreader = New Xml.XmlTextReader("C:\Program Files (x86)\Test\Version.xml")
currentreader.WhitespaceHandling = Xml.WhitespaceHandling.None
currentreader.Read()
currentreader.Read()
While Not currentreader.EOF
currentreader.Read()
If Not currentreader.IsStartElement Then
Exit While
End If
Version = currentreader.ReadElementString("AvailableVersion")
Versionlocation = currentreader.ReadElementString("ApplicationUrl")
End While
currentreader.Close()
serverreader = New Xml.XmlTextReader("C:\Program Files (x86)\Test\ServerVersion.xml")
serverreader.WhitespaceHandling = Xml.WhitespaceHandling.None
Console.WriteLine("Current Version: " & Version & vbNewLine & "Version Url: " & Versionlocation)
'error here'
serverreader.Read()
serverreader.Read()
While Not serverreader.EOF
serverreader.Read()
If Not serverreader.IsStartElement Then
Exit While
End If
ServerVersion = currentreader.ReadElementString("AvailableVersion")
Serverlocation = currentreader.ReadElementString("ApplicationUrl")
End While
If ServerVersion > Version Then
Console.WriteLine("New version available : " & ServerVersion)
End If
serverreader.Close()
End Sub
End Module
그것은 여전히 진행중 일 것 만 다운로드 '내가 할 수있는 경우 설치 프로그램을 실행하는 코드를 작성에 많은 지점이 아니다 새 버전의 위치를 찾지 마십시오.
<?xml version="1.0" encoding="UTF-8"?>
<VersionConfig>
<AvailableVersion>2.0.0.0</AvailableVersion>
<ApplicationUrl>http://192.168.2.226/EPI/2.0.0.0/</ApplicationUrl>
</VersionConfig>
비동기 적으로 다운로드 중입니다. 그리고 그것이 다운로드를 끝내기를 기다리지 않고 ... –
가! 어리석은 뭔가 였음을 알았습니다. 고마워, 토니! –
또한 'XmlTextReader'를 직접 사용하지 않아야합니다. 대신에'XmlReader.Create'를 사용하십시오. –