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

本文关键字:文本 一行 字符串 替换 | 更新日期: 2023-09-27 18:07:43

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

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

我得出的结论是,这是因为我做它的方式加载所有的文本在内存中,并写入所有的一次。现在我怎么一行一行地做呢?

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

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

这个SO问题与您想要做的事情类似,并且是逐行操作的。

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

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

此外,您可能需要考虑使用Parallel。