![](/img/trans.png)
[英]C# streamwriter denies access to save xml file into MyDocuments
[英]save xml file using streamwriter
我正在嘗試找到一種將數據保存回編碼為“ iso-8859-7”的xml文件的方法。
首先我使用加載XML
public XmlDocument LoadDocument(String x)
{
XmlDocument document = new XmlDocument();
StreamReader stream = new StreamReader(xml, Encoding.GetEncoding("iso-8859-7"));
document.Load(stream);
return (document);
}
將屬性加載到表單控件中,然后單擊“保存”按鈕
private void savebtn_Click(object sender, EventArgs e)
{
XmlNodeList attributes = commonMethods.LoadDocument(xml).DocumentElement.SelectNodes("//Class[@Name='" + classname + "']/Property[@Id='" + id + "']/attribute::*");
for (int x = 0; x < attributes.Count; )
{
foreach (Control ctr in table1.Controls)
{
if (ctr is TextBox)
{
if (ctr.Text == attributes[x].Value.ToString()) { x++; }
else
{
attributes[x].Value = ctr.Text; commonMethods.SaveDocument(xml);
x++;
}
}
else if (ctr is ComboBox)
{
if (((ComboBox)ctr).Text == attributes[x].Value) { x++; }
else
{
attributes[x].Value = ((ComboBox)ctr).Text; commonMethods.SaveDocument(xml);
x++;
}
}
}
}
}
它將更改保存回xml文件。 我曾經保存它而不使用像xmldoc.Save("sample.xml)
這樣的xmlwriter xmldoc.Save("sample.xml)
但是由於文件中有些字符,我不得不使用類似的方法。
public XmlDocument SaveDocument(String x)
{
XmlDocument document = new XmlDocument();
StreamWriter stream = new StreamWriter(x,false,Encoding.GetEncoding("iso-8859-7"));
document.Save(xml);
return (document);
}
問題是當我編譯時說“ xml被另一個進程使用”並且失敗。
System.IO.IOException
之所以會出現此異常,是因為StreamReader仍在打開文件,而該文件正等待完成(垃圾回收)。 您應該始終處置流(和讀取器/寫入器)以盡快釋放文件句柄。
public XmlDocument LoadDocument(String path)
{
XmlDocument document = new XmlDocument();
using (StreamReader stream = new StreamReader(path, Encoding.GetEncoding("iso-8859-7")))
{
document.Load(stream);
}
return (document);
}
public XmlDocument SaveDocument(XmlDocument document, String path)
{
using (StreamWriter stream = new StreamWriter(path,false,Encoding.GetEncoding("iso-8859-7")))
{
document.Save(stream);
}
return (document);
}
private void savebtn_Click(object sender, EventArgs e)
{
var doc = commonMethods.LoadDocument(xml);
XmlNodeList attributes = doc.DocumentElement.SelectNodes("//Class[@Name='" + classname + "']/Property[@Id='" + id + "']/attribute::*");
for (int x = 0; x < attributes.Count; )
{
foreach (Control ctr in table1.Controls)
{
if (ctr is TextBox)
{
if (ctr.Text == attributes[x].Value.ToString()) { x++; }
else
{
attributes[x].Value = ctr.Text; commonMethods.SaveDocument(doc, xml);
x++;
}
}
else if (ctr is ComboBox)
{
if (((ComboBox)ctr).Text == attributes[x].Value) { x++; }
else
{
attributes[x].Value = ((ComboBox)ctr).Text; commonMethods.SaveDocument(doc, xml);
x++;
}
}
}
}
}
您在加載文檔后沒有處置 StreamReader
對象
添加using
語句:
public XmlDocument LoadDocument(String x)
{
XmlDocument document = new XmlDocument();
using (StreamReader stream = new StreamReader(xml, Encoding.GetEncoding("iso-8859-7")))
{
document.Load(stream);
}
return (document);
}
參考: http : //msdn.microsoft.com/zh-cn/library/system.io.streamreader(v=vs.110).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.