【问题标题】:C#: Replace a string in a line of textC#:替换一行文本中的字符串
【发布时间】:2016-06-23 16:17:42
【问题描述】:

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

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

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

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# streamreader streamwriter writealltext


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多