写一个多线程程序 读写XML文件的时候出现
正由另一进程使用,因此该进程无法访问该文件
的错误。代码如下 /// <summary>
/// 查找XML文件中的值
/// </summary>
/// <param name="XmlPath">XML路径</param>
/// <param name="keys">需要查找XML中的哪个Key</param>
/// <returns>string</returns>
public string GetXmlMessage(string keys)
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(XmlPath);
string XmlValue = "";
XmlNode xNode;
XmlElement xElement1;
xNode = xDoc.SelectSingleNode("//appSettings");
xElement1 = (XmlElement)xNode.SelectSingleNode("//add[@key='" + keys + "']");
if (xElement1 != null)
{
XmlValue = xElement1.GetAttribute("value");
}
else
{ //没有找到value
XmlValue = "-1";
}
return XmlValue;
}这样的错误该如何解决呢。 我知道一般不会报这个错误,这个XML 文件被同时使用的几率很小,但是今天就是出现了。不知道各位大侠有没有什么好的建议或者方法。我自己想过在这个XML读写方法类的初始化方法中使用Lock方法,如下面代码 /*
XML 文档 就是一个 key 一个 value
*/
private string XmlPath ;//System.Windows.Forms.Application.LocalUserAppDataPath;
private object obj; public XmlManager(string XmlName)//XMLFile_TcpServer.xml
{
lock (obj)
{
XmlPath = System.Windows.Forms.Application.StartupPath;
XmlPath = XmlPath + XmlName;
//XmlPath = XmlPath.Replace(@"\bin\Release", XmlName);
//XmlPath = XmlPath.Replace(@"\bin\Debug", XmlName);
LogManager.WriteLog(LogFile.Warning, "XmlPath:" + XmlPath);
}
}
对lock的使用不是很了解。 不知道这样写有没有问题呢?
正由另一进程使用,因此该进程无法访问该文件
的错误。代码如下 /// <summary>
/// 查找XML文件中的值
/// </summary>
/// <param name="XmlPath">XML路径</param>
/// <param name="keys">需要查找XML中的哪个Key</param>
/// <returns>string</returns>
public string GetXmlMessage(string keys)
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(XmlPath);
string XmlValue = "";
XmlNode xNode;
XmlElement xElement1;
xNode = xDoc.SelectSingleNode("//appSettings");
xElement1 = (XmlElement)xNode.SelectSingleNode("//add[@key='" + keys + "']");
if (xElement1 != null)
{
XmlValue = xElement1.GetAttribute("value");
}
else
{ //没有找到value
XmlValue = "-1";
}
return XmlValue;
}这样的错误该如何解决呢。 我知道一般不会报这个错误,这个XML 文件被同时使用的几率很小,但是今天就是出现了。不知道各位大侠有没有什么好的建议或者方法。我自己想过在这个XML读写方法类的初始化方法中使用Lock方法,如下面代码 /*
XML 文档 就是一个 key 一个 value
*/
private string XmlPath ;//System.Windows.Forms.Application.LocalUserAppDataPath;
private object obj; public XmlManager(string XmlName)//XMLFile_TcpServer.xml
{
lock (obj)
{
XmlPath = System.Windows.Forms.Application.StartupPath;
XmlPath = XmlPath + XmlName;
//XmlPath = XmlPath.Replace(@"\bin\Release", XmlName);
//XmlPath = XmlPath.Replace(@"\bin\Debug", XmlName);
LogManager.WriteLog(LogFile.Warning, "XmlPath:" + XmlPath);
}
}
对lock的使用不是很了解。 不知道这样写有没有问题呢?
xDoc.Load(XmlPath);
改成
System.IO.FileStream fs = new FileStream("XmlPath", FileMode.Open, FileAccess.Read, FileShare.Read);
xDoc.Load(fs);