none
求救 VB.NET Xml Save报错 RRS feed

  • 问题

  • Dim XmlDoc As New XmlDocument
            Dim Reader As XmlReader = XmlReader.Create(AppPath & "Box.xml")

    ' Dim AppPath As String = Application.StartupPath & "\"
            XmlDoc.Load(Reader)
            Reader.Close()

    ‘ 省略对Xml文件的修改部分

    XmlDoc.Save(“Box.xml”) ' <--报错

    “System.IO.IOException”类型的未经处理的异常在 mscorlib.dll 中发生 

    其他信息: The process cannot access the file 'F:\ApplicationFiles\Box\bin\Debug\Box.xml' because it is being used by another process.

    似乎是文件被占用。

    我上网查了各种资料,代码都是这样写的,为什么只有我的报错?

    2014年7月23日 12:02

答案

  • 我都用的局部变量,使用完应该自动释放了。

    谢谢你的答复,问题还是没有解决。

    不过我发现保存时换一个文件名就不会报错,但在使用重命名的时候又提示被占用。

    Hi,

    对于这种情况,我建议你检查下整个项目中所有可能涉及到占用该文件的代码,检查他们有没有释放占用。

    另外需要检查下是否有其他进程正使用该文件,最彻底的办法是重启系统并重新运行项目来测试一下。

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Var_ 2014年7月25日 6:47
    2014年7月25日 2:49
    版主

全部回复

  • Dim XmlDoc As New XmlDocument
            Dim Reader As XmlReader = XmlReader.Create(AppPath & "Box.xml")

    ' Dim AppPath As String = Application.StartupPath & "\"
            XmlDoc.Load(Reader)
            Reader.Close()

    ‘ 省略对Xml文件的修改部分

    XmlDoc.Save(“Box.xml”) ' <--报错

    “System.IO.IOException”类型的未经处理的异常在 mscorlib.dll 中发生 

    其他信息: The process cannot access the file 'F:\ApplicationFiles\Box\bin\Debug\Box.xml' because it is being used by another process.

    似乎是文件被占用。

    我上网查了各种资料,代码都是这样写的,为什么只有我的报错?

    Hi,

    我用了如下代码进行了简单测试。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim XmlDoc As New XmlDocument
            Dim AppPath As String = Application.StartupPath & "\"
            Dim Reader As XmlReader = XmlReader.Create(AppPath & "Box.xml")
    
            ' Dim AppPath As String = Application.StartupPath & "\"
            XmlDoc.Load(Reader)
            Reader.Dispose()
    
            Dim newElem As XmlElement = XmlDoc.CreateElement("price")
            newElem.InnerText = "10.95"
            XmlDoc.DocumentElement.AppendChild(newElem)
    
            XmlDoc.Save("Box.xml")
            MsgBox("done")
        End Sub

    从结果和你的代码上来看并没有什么问题,至少你已经释放了 Reader所占用的资源, 如果可以的话尽可能地让该Reader对象调用Dispose方法来释放占用。

    我建议你重新检查下其他可能占用这个文件资源的进程,以及你程序中可能使用到的,对该文件占用并未释放的XmlReader。

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2014年7月24日 8:06
    版主
  • 楼主:XmlDocument直接用Load的功能,无需用Reader。

    具体可以参考:http://msdn.microsoft.com/zh-cn/library/875kz807(v=vs.110).aspx

    注意文件没有处于打开状态。


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2014年7月24日 9:18
    版主
  • 我都用的局部变量,使用完应该自动释放了。

    谢谢你的答复,问题还是没有解决。

    不过我发现保存时换一个文件名就不会报错,但在使用重命名的时候又提示被占用。

    2014年7月25日 0:56
  • 我都用的局部变量,使用完应该自动释放了。

    谢谢你的答复,问题还是没有解决。

    不过我发现保存时换一个文件名就不会报错,但在使用重命名的时候又提示被占用。

    Hi,

    对于这种情况,我建议你检查下整个项目中所有可能涉及到占用该文件的代码,检查他们有没有释放占用。

    另外需要检查下是否有其他进程正使用该文件,最彻底的办法是重启系统并重新运行项目来测试一下。

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Var_ 2014年7月25日 6:47
    2014年7月25日 2:49
    版主
  • 好吧,我再看看。
    2014年7月25日 6:46
  • 谢谢,问题找到了,果然有一处没有释放,在一个类里面。

    2014年7月25日 8:03