我试图找到最合理的方式来打开文件,修改其内容然后将其写回文件。
如果我有以下" MyFile.xml"
<?xml version="1.0" encoding="utf-8"?>
<node>
<data>this is my data which is long</data>
</node>
然后想根据这个修改它:
private static void Main(string[] args)
{
using (FileStream stream = new FileStream("Myfile.xml", FileMode.Open))
{
XDocument doc = XDocument.Load(stream);
doc.Descendants("data").First().Value = "less data";
stream.Position = 0;
doc.Save(stream);
}
}
我得到以下结果。请注意,由于总文件长度小于之前我在结尾处获得不正确的数据。
<?xml version="1.0" encoding="utf-8"?>
<node>
<data>less data</data>
</node>/node>
我想我可以使用File.ReadAll*
和File.WriteAll*
,但这意味着有两个文件开头。是不是有某种说法&#34;我想打开这个文件,读取它的数据,当我保存删除旧内容时#34;没有关闭并重新打开文件?我发现的其他解决方案包括FileMode.Truncate
,但这意味着我无法阅读内容。
答案 0 :(得分:3)
答案 1 :(得分:2)
为什么首先将文件读入文件流?
您可以执行以下操作:
private static void Main(string[] args]
{
string path = "MyFile.xml";
XDocument doc = XDocument.Load(path);
// Check if the root-Node is not null and other validation-stuff
doc.Descendants("data").First().Value = "less data";
doc.Save(path);
}
流的问题是,您可以读取或写入。
我已经读过,使用.net-Framework 4.5,它也可以在流上读写,但还没有尝试过。