Вот мой код, который открывает XML-файл (old.xml), фильтрует недопустимые символы и записывает в другой XML-файл (abc.xml). Наконец, я снова загружу XML (abc.xml). При выполнении followling линии, там говорит исключение файл XML используется другим процессом,где утечка в моем коде?
xDoc.Load("C:\\abc.xml");
Кто-нибудь есть какие-либо идеи, что не так? Любые утечки в моем коде и почему (я все время использую ключевое слово «using», смущен, чтобы видеть утечки ...)?
Вот мой весь код, я использую C# + VSTS 2008 под Windows Vista x64.
// Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
Encoding encoding = Encoding.GetEncoding("utf-8", new EncoderReplacementFallback(String.Empty), new DecoderReplacementFallback(String.Empty));
using (TextWriter writer = new StreamWriter(new FileStream("C:\\abc.xml", FileMode.Create), Encoding.UTF8))
{
using (StreamReader sr = new StreamReader(
"C:\\old.xml",
encoding
))
{
int bufferSize = 10 * 1024 * 1024; //could be anything
char[] buffer = new char[bufferSize];
// Read from the file until the end of the file is reached.
int actualsize = sr.Read(buffer, 0, bufferSize);
writer.Write(buffer, 0, actualsize);
while (actualsize > 0)
{
actualsize = sr.Read(buffer, 0, bufferSize);
writer.Write(buffer, 0, actualsize);
}
}
}
try
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load("C:\\abc.xml");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
EDIT1: Я попытался изменить размер буфера от 10M до 1M, и он работает! Я так смущен, какие-то идеи?
EDIT2: Я считаю, что эту проблему очень легко воспроизвести, когда старый старый файл XML очень большой, например, 100M или что-то в этом роде. Я подозреваю, что это известная ошибка .Net? Я собираюсь использовать такие инструменты, как ProcessExplorer/ProcessMonitor, чтобы узнать, какой процесс блокирует файл, чтобы он не обращался к XmlDocument.Load.
Почему такой большой буфер? (хотя это не должно касаться проблемы, было бы интересно узнать, почему 10Mb ...). Я мог бы использовать 10k, возможно ... –
Я попытался изменить размер буфера от 10M до 1M, и он работает! Я так смущен, какие-то идеи? – George2
Я использую большой размер буфера в моем исходном коде, предназначен только для целей тестирования, специальная ценность, не преднамеренно установленная. – George2