Поток StringBuilder в файл - PullRequest
       30

Поток StringBuilder в файл

16 голосов
/ 04 ноября 2011

Мне нужно создать большой текстовый документ.В настоящее время я использую StringBuilder для создания документа, а затем звоню File.WriteallText(filename,sb.ToString).К сожалению, это теперь начинает выбрасывать из памяти исключения.

Есть ли лучший способ для потоковой передачи StringBuilder в файл или есть какой-то другой метод, который я должен использовать?

Ответы [ 4 ]

21 голосов
/ 04 ноября 2011

Вместо использования StringBuilder, попробуйте использовать TextWriter (который имеет во многом похожий API, но который может выполнять запись в ряд базовых адресатов, включая файлы) - т.е.Стоит отделить код, который знает о файлах, от кода, который знает о том, как записывать данные, т. е.

using(var writer = File.CreateText(path))
{
    Serialize(writer);
}
...
void Serialize(TextWriter writer)
{
    ...
}

, что облегчает запись в разные цели.Например, теперь вы можете делать и в памяти:

var sw = new StringWriter();
Serialize(sw);
string text = sw.ToString();

Дело в том, что ваш код Serialize не нужно было менять, чтобы разместить другую цель.Это также может быть запись непосредственно в сеть или запись через поток сжатия / шифрования.Очень универсальный.

5 голосов
/ 04 ноября 2011

Просто используйте StreamWriter, который записывает в FileStream:

using (StreamWriter writer = new StreamWriter("filename.txt")) {
  ...
}

Это, конечно, означает, что вы не можете изменить текст, который уже написан, как вы можете сделать вStringBuilder, но я предполагаю, что вы все равно этим не пользуетесь.

1 голос
/ 04 ноября 2011

Почему бы не передавать прямо в поток?Вы можете использовать TextWriter .

0 голосов
/ 04 ноября 2011

Вы можете использовать StreamWriter и напрямую записывать в файл.

...