Я хочу прочитать XML-файл, применить преобразование, а затем записать в другой файл. Лучший способ, которым я могу придумать, это:
using (XmlTextReader reader = new XmlTextReader(new FileStream(_source, FileMode.Open)))
using (XmlTextWriter writer = new XmlTextWriter(new StreamWriter(_destination)))
{
_xslTransform.Transform(reader, writer);
}
Но я действительно хочу добиться прогресса. Если я просто копирую данные, я могу сделать что-то вроде этого (это может быть не на 100% правильно, а что-то вроде этого):
using (BinaryReader reader = new BinaryReader(new FileStream(_source, FileMode.Open)))
using (BinaryWriter writer = new StreamWriter(_destination))
{
byte[] buffer = new byte[2048];
int read = 0;
int actual = 0;
long total = reader.BaseStream.Length;
while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
{
writer.Write(buffer, 0, read);
actual = (actual <= total ? actual + read : read);
updateProgress(Convert.ToInt32(actual / total * 100));
}
}
Так есть ли способ сделать это при использовании XslCompiledTransform. Я мог бы просто прочитать его в память перед записью в файл, но я хочу ограничить объем используемой памяти, или XslCompiledTransform загружает все это в память?
Надеюсь, в этом есть какой-то смысл, спасибо!
Адам.