1
<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

4

2 回答 2

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);

但如果你的文件很大,那么这是不好的做法。

于 2013-02-07T12:42:59.713 回答
0

注意:您不能只更改文件中的一行,您需要读取所有内容,更改所需部分并再次写入所有内容。

根据您有关文件大小(GB 长)的信息,您实现所需行为的唯一方法是创建新文件并写入初始文件的内容,仅更改您需要的行。

处理应该逐行完成(如您在示例中所示)以实现最小的内存使用

但是,这种方法在操作完成之前需要硬盘上的 2X 空间(假设您将在完成所有操作后删除初始文件)

关于细节:这个问题提供了如何实现所描述方法的完整示例

于 2013-02-07T12:56:02.003 回答