Ответ 1
Вместо использования StringBuilder
попробуйте использовать TextWriter
(который имеет широко похожий API, но который может записывать несколько базовых адресов, включая файлы) - i.e.
using(TextWriter writer = File.CreateText(path))
{
// loop etc
writer.Write(...);
}
В более общем смысле, стоит отделить код, который знает о файлах из кода, который знает о том, как записывать данные, т.е.
using(var writer = File.CreateText(path))
{
Serialize(writer);
}
...
void Serialize(TextWriter writer)
{
...
}
это упрощает запись в разные объекты. Например, теперь вы можете делать и в памяти:
var sw = new StringWriter();
Serialize(sw);
string text = sw.ToString();
Точка: ваш код Serialize
не должен меняться, чтобы разместить другую цель. Это может также быть запись непосредственно в сеть или запись через поток сжатия/шифрования. Очень универсальный.