Набор данных ReadXML метод Stream vs. String - PullRequest
0 голосов
/ 23 июля 2010

У меня есть код, который вызывает метод ReadXml класса DataSet и передает имя файла ReadXml (strFileName).Иногда это вызывает исключение System.IO.IOException, поскольку файл используется другим процессом.

Если я изменю код для использования метода ReadXml (stream) и передам FileStream следующим образом:

using(FileStream fs = new FileStream(this.filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ))
{
     MyDS.ReadXxml(FileStream);
}

Это предотвратит возникновение IOException?Что происходит под капотом, когда вы просто передаете имя файла?

Ответы [ 3 ]

0 голосов
/ 23 июля 2010

"Иногда это выдает System.IO.IOException, поскольку файл используется другим процессом."

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

Если вы считаете, что это неверно, то вам следует убедиться, что все ваши FileStreams правильно закрыты, используя конструкцию using, как у вас в вопросе.

Надеюсь, это поможет.

0 голосов
/ 24 июля 2010

Класс DataSet создаст для вас объект FileStream, если вы передадите имя файла в виде строки. Перегруженный метод, который принимает Stream в качестве параметра, позволяет передавать объект Stream, если он есть вместо имени файла.

Версия, которая принимает строку в качестве параметра, просто создает FileStream и передает его в версию, которая принимает Stream в качестве параметра.

Вам следует использовать перегрузку, которая соответствует имеющимся у вас данным. В этом случае строка.

0 голосов
/ 23 июля 2010

Скорее всего, они оба открывают FileStream и передают его XmlReader.Create, а затем используют XmlReader для обработки данных.

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