C # XmlTextWriter класс и VisualStudio - PullRequest
0 голосов
/ 16 декабря 2009

Я пытаюсь использовать класс XmlTextWriter в C #, но он работает, только если я указываю полный путь к файлу (как в "C: \ file.xml"). Если я пытаюсь использовать относительный путь (как в «file.xml»), он создает файл (в той же папке, что и файл cs), но не показывает никакого содержимого. Есть ли какое-либо свойство в дереве проекта в VS, которое я должен установить, чтобы файл обновлялся при каждом запуске программы?

Некоторый код, чтобы помочь:

Если я это сделаю:

XmlTextWriter f = new XmlTextWriter("C:/file.xml", null);

это работает.

Но если я попытаюсь использовать файл, включенный в проект, например:

XmlTextWriter f = new XmlTextWriter("file.xml", null);

это не работает. Файл остается пустым.

Спасибо заранее.

Ответы [ 2 ]

3 голосов
/ 16 декабря 2009

Вы несете ответственность за предоставление XMLWriter правильного имени файла, включая путь. Этот путь к файлу может быть относительным или абсолютным. Дело в том, что относительный путь будет работать с любым текущим каталогом в RUNTIME, а не с тем, что вы ожидаете увидеть в источнике в конструкторе.

В частности, если вы дадите только имя файла - без пути, файл с указанным именем, вероятно, будет создан прямо рядом с вашим .exe файлом

0 голосов
/ 16 декабря 2009

Похоже, что поток файлов, который является внутренним для устройства записи, не записывается на диск. Это произойдет автоматически, когда внутренний поток достигнет определенного размера, но я не думаю, что есть какие-либо гарантии относительно того, когда это произойдет или сколько данных будет записано на диск. Я рекомендую вызывать Close() или Dispose() на устройстве записи, когда вы закончите его использовать и хотите убедиться, что его содержимое записано на диск.

Также обратите внимание на следующие предложения.

Создайте писатель с помощью XmlWriter.Create и поместите его в блок использования.

using (XmlWriter writer = XmlWriter.Create(filename))
{ /* code that uses writer */ }

Это позволяет немного больше гибкости при создании средства записи текста, так как вы можете передать XmlReaderSettings, если это будет необходимо. Кроме того, блок using заботится о вызове close / dispose, когда вы закончите с использованием устройства записи.

Если у вас проблемы с содержимым перезаписываемого файла, используйте перегрузку конструкции, которая принимает Stream.

using (XmlWriter writer = XmlWriter.Create(File.Open(filename, FileMode.Open))
{ /* code that uses writer */ }

Это дает вам немного больше контроля над тем, как будут обрабатываться конфликты в именах файлов.

...