2013-11-10 4 views
0

У меня есть диалоговое окно с открытым файлом, в котором открывается файл XML. Выражение регулярного выражения находит каждую строку между > и < и записывает каждую строку в новой строке в текстовое поле rich.Заменить найденные строки новыми строками?

private void button1_Click(object sender, EventArgs e) 
{ 
    if (openFileDialog1.ShowDialog() == DialogResult.OK) 
    { 
     StreamReader sr = new StreamReader(openFileDialog1.FileName); 
     string s = sr.ReadToEnd(); 
     richTextBox1.Text = s; 
    } 

    string txt = richTextBox1.Text; 
    var foundWords = Regex.Matches(txt, @"(?<=>)([\w ]+?)(?=<)"); 
    richTextBox1.Text = string.Join("\n", foundWords.Cast<Match>().Select(x => x.Value).ToArray()); 
} 

Тогда я могу изменить эти строки. Но как я могу импортировать те измененные строки обратно в исходный XML-файл на том же месте?

ответ

3

Вы можете попробовать заменить эти строки внутри файла, но как только вы замените что-то на другую длину, было бы проще просто написать весь файл.

Похоже, что пользователь может изменить эти строки - это ваш вызов там: вам нужно будет отслеживать, какое слово было в исходном файле, чтобы заменить их обратно в данные. Кроме того, пользователь может удалить или добавить строки в текстовое поле, что будет делать ваше приложение в этом случае?

Было бы проще обработать файл xml с помощью XDocument и сохранить XElement s, которые содержат исходные значения. XDocument позволяет заменить эти значения и сохранить файл.

Обратите внимание, что, поскольку вы явно не закрываете StreamReader, файл может по-прежнему использоваться, когда вы пытаетесь его написать. Просто поставьте StreamReader в блок using, чтобы предотвратить это.

+0

Но как я могу переписать весь файл с новыми строками? – orglce

+1

@orglce Я предлагаю вам изменить строку в памяти, а затем снова записать весь файл. Как только пользователь изменяет эти строки, хотя нет возможности автоматически поместить измененные версии обратно, так что вам нужно как-то вспомнить, какая строка была там. –

+0

Хорошо! Благодаря! Я постараюсь это сделать! – orglce

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