C#:替换一行文本中的字符串

时间:2015-08-13 16:13:14

标签: c# streamreader streamwriter writealltext

我试图替换多个文件中的特定字符串。这些文件是从特定来源读取的。我想要的是逐行读取这些文件,在每一行中找到我想要的字符串并用其他字符串替换它们。

到目前为止,我已经想出了这个。这是有效的,但下面代码的问题是它非常慢。

我已经得出结论,这是因为我通过加载内存中的所有文本并一次性写入来完成它的方式。现在我该如何逐行完成这项工作?

static void Main()
{
    const string dir_source = "d:\\myfiles";

    var files = Directory.GetFiles(dir_source, "*", SearchOption.AllDirectories);

    foreach (var file in files)
    {
        var extension = Path.GetExtension(file);

        var str_old = "Google";
        var str_new = "Alphabet";

        if (extension == ".cs" || extension == ".xaml")
        {
                File.WriteAllText(file,
                    File.ReadAllText(file)
                        .Replace(str_old , str_new));
        }
    }

    Console.WriteLine("Completed");
    Console.ReadKey();
}

1 个答案:

答案 0 :(得分:1)

SO question正在执行与您想要执行的操作类似的操作,并且逐行操作。

接受的答案使用此方法替换文件行级别:

File.WriteAllLines(outputFile,
  File.ReadLines(inputFile)
  .Select(t => t.Replace(str_old , str_new)));

此外,您可能需要考虑使用Parallel.ForEach而不是ForEach来操作多个线程以帮助您提高性能。