Я сейчас работаю над классом, который позволит редактировать очень большие текстовые файлы (4Gb +). Это может показаться немного глупым, но я не понимаю, как изменить текст в потоке. Вот мой код:Modify FileStream
public long Replace(String text1, String text2)
{
long replaceCount = 0;
currentFileStream = File.Open(CurrentFileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
using (BufferedStream bs = new BufferedStream(currentFileStream))
using (StreamReader sr = new StreamReader(bs))
{
string line;
while ((line = sr.ReadLine()) != null)
{
if (line.Contains(text1))
{
line.Replace(text1, text2);
// Here I should save changed line
replaceCount++;
}
}
}
return replaceCount;
}
извините перепутали ваш образец (что делает вообще ничего не писать) с одним Ehsan Улла»(который использует' StringBuilder', который явно не собирается, чтобы помочь вам с большими файлами). Удаление моего ответа. –
Это просто не может работать в общем случае. Только в очень необычном случае, когда замена точно такая же, как и оригинал. Файлы не допускают вставки и удаления в середине файла. Поэтому требуется полная переписывание файла. Если у вас есть 4 текстовых файла с jiggabyte, вы делаете это неправильно. –
@HansPassant, 4GB + файлы не являются результатом операции, но я обрабатываю существующие большие файлы ... –