文本附加到现有文件

时间:2013-02-07 12:25:16

标签: c# winforms file-io

<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

附加现有文本

2 个答案:

答案 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提供了如何实现所描述方法的完整示例