Visual Basic“未处理的异常”

时间:2012-02-05 11:25:22

标签: vb.net

您好我在尝试将序列号保存到XML文件时收到此错误。 如果文件不存在,它会保存文件,但是如果我在Xml文件中将Registered标记更改为False,然后再试一次,它会显示“进程无法访问文件...因为它正被另一个进程使用”。 在我的主要表单中,我从XML中读取信息,并在我的regform中(我打开,如果xml中的注册标记为false)我写入该文件。是因为那个?!我不这么认为。 这是我的注册课程:

    Imports System.IO
    Imports System.Xml

    Public Class RegistrationClass
    Public Property SerialNumber As String
    Public Property Registered As Boolean = False
    Public Sub Write_Reg(ByVal FileString As String, ByVal RegisterName As String, ByVal          RegisterCompany As String, ByVal RegisterSerialNumber As String)
        Dim Registered As Boolean = False
        Dim Comment As String = "StroySoft 2012 Register Database"
        Dim SerialNumber As String = "dev-xxx-123"
        Dim ClientOS As String = Trim(My.Computer.Info.OSFullName)
        If RegisterSerialNumber = SerialNumber Then
            Dim settings As New XmlWriterSettings()
            settings.Indent = True

            ' Initialize the XmlWriter.
            Dim XmlWrt As XmlWriter = XmlWriter.Create(FileString, settings)

            With XmlWrt

                ' Write the Xml declaration.
                .WriteStartDocument()

                ' Write a comment.
                .WriteComment(Comment)

                ' Write the root element.
                .WriteStartElement("Data")

                ' Start our first person.
                .WriteStartElement("Register")

                ' The person nodes.

                .WriteStartElement("Name")
                .WriteString(RegisterName.ToString())
                .WriteEndElement()

                .WriteStartElement("Company")
                .WriteString(RegisterCompany.ToString())
                .WriteEndElement()

                .WriteStartElement("SerialNumber")
                .WriteString(RegisterSerialNumber.ToString())
                .WriteEndElement()

                Registered = True
                .WriteStartElement("Registered")
                .WriteString(Registered)
                .WriteEndElement()

                .WriteStartElement("ClientOS")
                .WriteString(ClientOS)
                .WriteEndElement()

                ' The end of this person.
                .WriteEndElement()

                ' Close the XmlTextWriter.
                .WriteEndDocument()
                .Close()
            End With
            MsgBox("Успешна регистрация! Благодарим Ви!")
            MainForm.РегистрацияToolStripMenuItem.Visible = False
        Else
        MsgBox("Невалиден сериен номер!")
        End If
    End Sub
    Public Sub Check_Reg(ByVal FileString As String)
        If (System.IO.File.Exists(FileString)) Then

            Dim document As XmlReader = New XmlTextReader(RegForm.RegFile)

            While (document.Read())

                Dim type = document.NodeType

                If (type = XmlNodeType.Element) Then

                    If (document.Name = "Registered") Then
                        If document.ReadInnerXml.ToString() = "True" Then
                            Registered = True
                        Else
                            Registered = False
                        End If

                    End If

                    If (document.Name = "SerialNumber") Then
                        SerialNumber = document.ReadInnerXml.ToString()
                    End If

                End If

            End While

        Else

            MessageBox.Show("The filename you selected was not found.")

        End If
    End Sub
End Class

1 个答案:

答案 0 :(得分:1)

  

是因为那个吗?!我不这么认为。

正是因为这个原因。

您应该始终确保通过将它们包装在Using块中来正确处理IDisisposable资源,例如Streams和Writers / Readers。在你的情况下,我没有看到你关闭你的读者。但是如果你将它包装在一个使用块中,你不应该担心它。即使抛出异常,资源也会被正确释放。

示例:

Using XmlWrt As XmlWriter = XmlWriter.Create(FileString, settings)
    ...
End Using

您应该对XmlReader

执行相同的操作
Using document As XmlReader = XmlReader.Create(RegForm.RegFile)
    ...    
End Using
相关问题