2015-09-23 2 views
0

Если я ставлю в своем коде следующие утверждения работы:Как изменить несколько строк в текстовом файле?

private void Install_Click(object sender, EventArgs e) 
     { 
var lin =File.ReadLines(path + "installer.ini").ToArray(); 
var license = lin.Select(line => Regex.Replace(line, @"license=.*", "license=yes")); 
      File.WriteAllLines(installerfilename, license); 
} 

в installer.ini у меня будет: license=yes. Но если я добавлю еще один, то только второй будет работать.

private void Install_Click(object sender, EventArgs e) 
      { 
    var lin =File.ReadLines(path + "installer.ini").ToArray(); 
    var license = lin.Select(line => Regex.Replace(line, @"license=.*", "license=yes")); 
       File.WriteAllLines(installerfilename, license); 
var lmgr_files = lin.Select(line => Regex.Replace(line, @"lmgr_files=.*", "lmgr_files=true")); 
      File.WriteAllLines(installerfilename, lmgr_files); 
    } 

В installer.ini остаются license=no и будет lmgr_files=true. Как я могу заставить второй код работать, и способ не работает?

ответ

1

Вы также можете сделать это в одном цикле. Что-то вроде этого:

 var lin = File.ReadLines(Path.Combine(path,"installer.ini")).ToArray(); 
     var license = lin.Select(line => 
     { 
      line = Regex.Replace(line, @"license=.*", "license=yes"); 
      //you can simply add here more regex replacements 
      //line = Regex.Replace(line, @"somethingElse=.*", "somethingElse=yes"); 

      return Regex.Replace(line, @"lmgr_files=.*", "lmgr_files=true"); 
     }); 

     File.WriteAllLines(installerfilename, license); 
+0

ваш ответ помогите мне так мах, и то же самое, что вы можете мне помочь с этим http://stackoverflow.com/questions/32731966/how-i-can-modify-the-code-to-make -work-all-statements? noredirect = 1 # comment53309508_32731966Это просто факт, что у меня есть другое заявление, которое поможет мне скопировать некоторые данные из другого файла, и я хочу сделать связь между этим – ben

1

Это потому, что вы читаете файл один раз, написание его дважды.

Сначала вы редактируете строку license, записывая отредактированный файл. Затем вы редактируете строку lmgr_files, переписываете свое предыдущее редактирование.

Удалить свой первый звонок, чтобы File.WriteAllLines(). В вашем втором select используйте license (то есть, что возвращено первым Select()) вместо lin (т. Е. Исходное содержимое файла).

// Use Path.Combine() to combine path parts. 
var lin = File.ReadLines(Path.Combine(path, "installer.ini")).ToArray(); 

// Replace the license=... part. License will now hold the edited file. 
var license = lin.Select(line => Regex.Replace(line, @"license=.*", "license=yes")); 

// No need to write the file here, as it will be overwritten. 
//File.WriteAllLines(installerfilename, license); 

// Select from the edited lines (i.e. "license"). 
var lmgr_files = license.Select(line => Regex.Replace(line, @"lmgr_files=.*", "lmgr_files=true")); 

// Now it is time to write! 
File.WriteAllLines(installerfilename, lmgr_files); 

При необходимости, для редактирования файлов INI можно использовать different method.

+0

Спасибо! и вы можете мне помочь, пожалуйста, с этим вопросом http://stackoverflow.com/questions/32731966/how-i-can-modify-the-code-to-make-work-all-statements?noredirect1_comment53309508_32731966 – ben

+0

Разве это не тот самый вопрос? – Micke

+0

Нет, там у меня есть первая часть, в которой я копирую некоторые данные из другого файла – ben