Stream StringBuilder в файл
мне нужно создать большой текстовый документ. В настоящее время я использую StringBuilder
сделать документ, а затем вызвать File.WriteallText(filename,sb.ToString)
. К сожалению, теперь это начинает выбрасывать из памяти исключения.
есть ли лучший способ потоковой передачи a StringBuilder
файл или есть какой-то другой метод, который я должен использовать?
4 ответов
вместо StringBuilder
, попробуйте использовать TextWriter
(который имеет широко похожий API, но который может писать в ряд базовых направлений, включая файлы) - т. е.
using(TextWriter writer = File.CreateText(path))
{
// loop etc
writer.Write(...);
}
в более общем плане стоит отделить код, который знает о файлах, от кода, который знает, как писать данные, т. е.
using(var writer = File.CreateText(path))
{
Serialize(writer);
}
...
void Serialize(TextWriter writer)
{
...
}
это упрощает запись в разные цели. Например, теперь вы можете сделать in-memory тоже:
var sw = new StringWriter();
Serialize(sw);
string text = sw.ToString();
дело в том,: ваш Serialize
код не нужно было менять, чтобы разместить другую цель. Это также может быть запись непосредственно в сеть или запись через поток сжатия/шифрования. Очень универсальный.
просто использовать StreamWriter
это записывает в FileStream
:
using (StreamWriter writer = new StreamWriter("filename.txt")) {
...
}
Это, конечно, означает, что вы не можете изменить текст, который уже написан, как вы можете сделать в StringBuilder
, но я предполагаю, что вы все равно не используете это.
Почему бы не потоковое непосредственно в поток? Вы можете использовать TextWriter.