VBScript和C#如何在不锁定文件的情况下读写XML?

4

情境:

  1. 网络用户登录域
  2. 组策略运行VBScript脚本
  3. VBScript从XML中读取
  4. VBScript根据从XML获取的信息执行操作

我应该使用哪些VBScript方法,以便在多个用户同时访问XML的网络上,我不容易遇到文件锁定问题?

如果我制作一个C#程序来在操作时间(同时从XML中读取)从网络位置读取和修改现有的XML文件,我应该使用哪些C#方法来读写XML而不会引起锁定问题?


没有办法在不锁定文件的情况下允许写入(因为用户B可以读取文件,用户A可以写入文件,然后用户B写入文件导致用户A的记录丢失)。您需要创建一个可以管理请求的服务。更简单的选择是使用SQL Server而不是XML服务。 - Trisped
我需要在这方面更具体。 - user1880826
您可以向XML文件添加一个标签字段,指示它当前是否正在使用,以及可能用于调试/跟踪目的的帐户。在使用时,将相关字段的标记设置为1,在完成时,脚本将其更改为0。在VBS中添加等待。这种方法可能被认为是一种hack,但除非您的脚本运行时间很长,或者如果有大量用户同时访问XML,否则它应该可以工作。在这种情况下,请切换到SQL。 - Lizz
2个回答

0
针对访问XML文件的C#程序,您可以执行以下操作:
  1. 使用backgroundWorker组件处理XML文件的读写请求
  2. 添加所有相应的事件处理程序以了解进度更新等信息。
  3. 调用RunWorkerAsync开始读写操作。

来源:MSDN


0

我不明白为什么这会变得如此复杂。只需操作2个文件即可。

  • VBScript 从文件 A1.xml 中读取
  • C# 程序写入/更新文件 A2.xml,然后替换 A1.xml

而 VBScript 可以看起来像这样...

Set xmlDoc   = CreateObject("Msxml2.DOMDocument.6.0")
xmlDoc.Async = False
bReturn      = False
Do Until bReturn
    WScript.Sleep 3500
    bReturn = xmlDoc.Load(".../A1.xml")
Loop
'...

1
请在 .Load 调用中添加参数列表 ()。 - Ekkehard.Horner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接