-1

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

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

我得出的结论是,这是因为我的做法是将所有文本加载到内存中并一次全部写入。现在我该如何逐行执行此操作?

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();
}
4

1 回答 1

1

这个SO question正在做与您想做的事情类似的事情,并且是逐行操作的。

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

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

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

于 2015-08-13T16:18:10.097 回答