2015-08-13 4 views
-1

Я пытаюсь заменить определенные строки в нескольких файлах. Эти файлы считываются из определенного источника. Я хочу читать эти файлы по строкам, находить нужные строки в каждой строке и заменять их другими строками.C#: Заменить строку в строке текста

До сих пор я придумал это. Это работает, но проблема с приведенным ниже кодом заключается в том, что он очень медленный.

Я пришел к выводу, что это связано с тем, как я это делаю, загружая весь текст в память и записывая все это сразу. Теперь, как я могу это сделать за строкой?

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

Этот SO question делает что-то похожее на то, что вы хотите сделать, и работает на построчной основе.

Принятого ответ использует этот метод для файлового уровня строки заменить:

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

Кроме того, вы можете рассмотреть возможность использования Parallel.ForEach вместо ForEach работать на нескольких потоках, чтобы помочь вашей производительности.

Смежные вопросы