<namespace>
<root>
<node1>
<element 1>
<element 1>
</node1>
<node2>
<element 1>
<element 1>
</node2>
</root>
string stringContains = string.Empty;
foreach(string line in File.ReadLines(Path))
{
if(line.Contains("<Root>"))
{
stringContains = line.Replace("<Root>", "<Root>" + newelement.OuterXml);
}
}
File.AppendAllText(Path, stringContains);
我必须将root
替换为其他节点,
所以我要附加文字。但是,上面的代码会使用stringContains
答案 0 :(得分:0)
试试这个。
string stringContains = string.Empty;
var lines = File.ReadLines(Path);
foreach (var line in lines)
{
if(line.Contains("<Root>"))
{
stringContains = line.Replace("<Root>", "<Root>" + newelement.OuterXml);
}
}
File.WriteAllLines(Path, lines);
但是如果你的文件很大,那么这是不好的做法。
答案 1 :(得分:0)
注意:您不能只更改文件中的一行,您需要阅读所有内容,更改所需部分并再次写入所有内容。
根据您关于文件大小(GBs long)的信息,您实现所需行为的唯一方法是创建新文件并写入初始文件的内容,仅更改您需要的行。
处理应该逐行进行(如您在样本中所示)以实现最少的内存使用
然而,这种方法在您的硬盘驱动器上占用了2倍的空间,直到操作完成(假设您将在完成后删除初始文件)
关于细节:this question提供了如何实现所描述方法的完整示例