我试图开发一个Windows 窗体应用程序来读取和写入一个非常大的 XML 文件。我有两个按钮,1) 用于编写 XML 文件,** 和 2) 读取 XML 文件。当我单击写入 XML 按钮时,我的 winForm 应用程序挂起。写入 XML 文件时不允许执行其他操作,但我想读取和写入同一个 XML 文件。
用于阅读
void btnReading_Click(object sender, EventArgs e)
{
strXpathQuery = "/AppXmlLogWritter/LogData[substring(LogDateTime, 1, 8) >='" +
dateTimePickerFromDate.Value.ToString("yyyyMMdd") +
"' and substring(LogDateTime, 1, 8) <='" +
dateTimePickerToDate.Value.ToString("yyyyMMdd") +
"']";
XmlElement objXmlRoot = null;
XmlNodeList objxmlNodeList = objXmlRoot.SelectNodes(strXpathQuery);
}
void BindData(objxmlNodeList);
{
BindData(XmlNodeList objxmlNodeList)
DataTable dataTable = new DataTable();
dataTable = XmlNodeListToDataTable(objxmlNodeList, new string[] { "LogID", "LogDateTime"});
lstViewInfo.View = View.Details;
lstViewInfo.Clear();
lstViewInfo.Columns.Add("LogID", Convert.ToInt32(lstViewInfo.Width * 0.20));
lstViewInfo.Columns.Add("LogDateTime", Convert.ToInt32(lstViewInfo.Width * 0.20));
ListViewItem objListViewitem = null;
for (int i = 0; i < dataTable.Rows.Count; i++)
{
objListViewitem = new ListViewItem();
objListViewitem.Text = dataTable.Rows[i]["LogID"].ToString();
objListViewitem.SubItems.Add(dataTable.Rows[i]["LogDateTime"].ToString());
lstViewInfo.Items.Add(objListViewitem);
}
}
写作用
void button1_Click(object sender, EventArgs e)
{
Mutex objMutex = new Mutex(false, @"Global\MySharedLog");
XmlDocument xmlDoc = new XmlDocument();
string currentDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
XmlElement newelement = xmlDoc.CreateElement("LogData");
XmlElement xmlLogID = xmlDoc.CreateElement("LogID");
XmlElement xmlLogDateTime = xmlDoc.CreateElement("LogDateTime");
int randomNumber = random.Next(9999);
xmlLogID.InnerText = _logIDPrefix + currentDateTime + DateTime.UtcNow.Ticks + randomNumber;
xmlLogDateTime.InnerText = currentDateTime;
newelement.AppendChild(xmlLogID);
newelement.AppendChild(xmlLogDateTime);
try
{
objMutex.WaitOne();
if (!File.Exists(_logFilePath))
{
File.WriteAllText(
_logFilePath,
"<?xml version='1.0' encoding='utf-8' standalone='yes'?>\r\n<AppXmlLogWritter><objMutex></objMutex></AppXmlLogWritter>");
}
using (FileStream fileStream = new FileStream(_logFilePath,
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.ReadWrite))
{
xmlDoc.Load(fileStream);
xmlDoc.DocumentElement.AppendChild(newelement);
fileStream.SetLength(0);
xmlDoc.Save(fileStream);
}
}
finally
{
objMutex.ReleaseMutex();
}
}