2016-09-23 4 views
0

Этот код используется для изменения индекса от 1 до 50001, 50002 ect. Но это не похоже на сохранение в текстовом файле. Есть ли способ сказать file.Save? или я делаю что-то глупое.Замена текста в текстовом файле не изменится в папке

Вот мой код

int count = 50000; 
     string line; 

     //string str = File.ReadAllText(); 
     System.IO.StreamReader file = 
     new System.IO.StreamReader(@"C:\Documents\new\example\example.txt"); 
     while ((line = file.ReadLine()) != null) 
     { 
      line = line.Replace(":1}}", ":" + count + "}}"); 
      count++; 
     } 
+0

Вы должны записать его обратно в файл, используя 'StreamWriter'. – HimBromBeere

+0

Возможный дубликат [одновременного чтения-записи файла в C#] (http://stackoverflow.com/questions/3817477/simultaneous-read-write-a-file-in-c-sharp) – HimBromBeere

ответ

1

Вы должны написать измененные данные назад:

string path = @"C:\Documents\new\example\example.txt"; 

    int count = 50000; 

    var target = File 
    .ReadLines(path) 
    .Select(line => line.Replace(":1}}", ":" + count++ + "}}")) 
    .ToList(); // materialization required if you want to write back to the same file 

    // You can here inspect, debug etc., what you're going to write back, e.g. 
    // Console.Write(string.Join(Environment.NewLine, target)); 

    File.WriteAllLines(path, target); 
+0

Это выглядит намного чище, чем мой подход ;-) – Mat

+0

Удивительное спасибо. Есть ли способ поиска файла для всего текстового файла с помощью этого ... Я устал foreach (строковый файл в Directory.EnumerateFiles (путь, "* .txt", SearchOption.AllDirectories)) { – Nicola

+1

@Nicola : да, я предлагаю * извлечь метод * для этого: public public void ChangeMyFile (string path) {/ * код из ответа здесь * /} ', а затем вы можете использовать' foreach (строковый файл в Directory.EnumerateFiles (path, "* .txt", SearchOption.AllDirectories)) {ChangeMyFile (файл);} ' –

0
int count = 50000; 

     //string str = File.ReadAllText(); 
     string fileName = @"C:\Documents\new\example\example.txt"; 
     List<string> lines = new List<string>(); 

     using (System.IO.StreamReader file = 
        new System.IO.StreamReader(fileName)) 
     { 
      string line; 
      while ((line = file.ReadLine()) != null) 
      { 
       line = line.Replace(":1}}", ":" + count + "}}"); 
       lines.Add(line);      
       count++; 
      } 
     } 

     using (StreamWriter sw = new StreamWriter(fileName,false)) 
     { 
      foreach (string line in lines) 
      { 
       sw.WriteLine(line); 
      } 
     } 
+0

Вы должны добавить 'line' изменено на коллекцию 'lines', например 'lines.Add (строка);' –

+0

это хороший момент ;-) исправлено это – Mat

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