XmlDocument.Сохранить необработанное исключение, выброшенное из потока GC - PullRequest
3 голосов
/ 02 декабря 2011

Я разрабатываю простое приложение, когда я пытаюсь сохранить XMLDocument на флэш-накопитель, на котором недостаточно свободного места, происходит странная вещь.Хотя я уже добавил предложение try catch для XMLDocument.Save (filePath), я все еще получаю необработанное исключение, и, похоже, исключение выдается из потока завершения GC (кажется, что GC пытается сбросить еще 4096 байт, которых нет на диске).Я думаю, что это распространенный сценарий использования объекта XMLDocument, интересно, что не так?

фрагмент кода:

XmlDocument query = new XmlDocument();
query.Load("g:\\test.xml");
... //modify the content of query to make it bigger
try
{
  query.Save("g:\\test.xml");
}
catch(Exception ex)
{}

Трассировка стека исключений, как показано ниже:

mscorlib.dll! System.IO .__ Error.WinIOError (int errorCode = 112, строка MaybeFullPath = "") + 0x498 байт mscorlib.dll! System.IO.FileStream.WriteCore (буфер байта [], смещение int, число int) +0x119 байт mscorlib.dll! System.IO.FileStream.FlushWrite (bool с именемFromFinalizer) + 0x22 байт mscorlib.dll! System.IO.FileStream.Dispose (bool discing = false) + 0x57 байт
mscorlib.dll! System.IO.FileStream.Finalize () + 0x1b байт

1 Ответ

5 голосов
/ 02 декабря 2011

Ну, проблема в том, что какой-то код где-то не избавляется от FileStream, когда с ним покончено. Когда FileStream завершается, он пытается сбросить данные - в этот момент выдается исключение.

Если это действительно весь ваш код, он звучит , как будто это ошибка в XmlDocument.Save(), которая обязательно должна закрыть все свои потоки перед возвратом. Вы можете обойти это, открыв FileStream самостоятельно (с помощью оператора using) и передав поток вместо XmlDocument.Save.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...