Мой код пока
StreamReader reading = File.OpenText("test.txt");
string str;
while ((str = reading.ReadLine())!=null)
{
if (str.Contains("some text"))
{
StreamWriter write = new StreamWriter("test.txt");
}
}
Я знаю, как найти текст, но понятия не имею, как заменить текст в файле своим собственным.
c#
.net
io
streamreader
file-handling
Win Coder
источник
источник
Ответы:
Читать все содержимое файла. Сделайте замену с
String.Replace
. Записать содержимое обратно в файл.источник
Regex.Replace
System out of memory
исключение.Вам будет трудно писать в тот же файл, из которого вы читаете. Один быстрый способ - просто сделать это:
Вы можете выложить это лучше с
источник
ReadAllText
закрывает доступ к файлу доWriteAllText
. Я использую эту технику в своем собственном приложении.Вам нужно записать все строки, которые вы прочитали, в выходной файл, даже если вы их не меняете.
Что-то вроде:
Если вы хотите выполнить эту операцию на месте, то самый простой способ - использовать временный выходной файл и в конце заменить входной файл выходным.
(Попытка выполнить операции обновления в середине текстового файла довольно трудна для понимания, потому что всегда иметь замену одинаковой длины сложно, поскольку большинство кодировок имеют переменную ширину.)
РЕДАКТИРОВАТЬ: Вместо двух файловых операций, чтобы заменить исходный файл, лучше использовать
File.Replace("input.txt", "output.txt", null)
. (См. MSDN .)источник
Вероятно, вам придется вытянуть текстовый файл в память, а затем сделать замены. Затем вам придется перезаписать файл, используя метод, который вам известен. Итак, вы бы сначала:
Затем вы можете перебрать и заменить текст в массиве.
Этот метод дает вам некоторый контроль над манипуляциями, которые вы можете сделать. Или вы можете просто сделать замену в одной строке
Надеюсь, это поможет.
источник
Вот как я это сделал с большим (50 ГБ) файлом:
Я пробовал 2 разных способа: первый - чтение файла в память и использование Regex Replace или String Replace. Затем я добавил всю строку во временный файл.
Первый метод работает хорошо для нескольких замен Regex, но Regex.Replace или String.Replace могут вызвать ошибку нехватки памяти, если вы делаете много замен в большом файле.
Во-вторых, построчно читая временный файл и вручную строя каждую строку, используя StringBuilder, и добавляя каждую обработанную строку в файл результатов. Этот метод был довольно быстрым.
источник
источник
Я стараюсь использовать простой прямой код столько, сколько я могу, ниже код работал нормально со мной
источник