Мой C # немного заржавел, и я никогда раньше не писал с ним XML. У меня проблемы с получением XML для записи в файл, если я пытаюсь записать что-либо, кроме элементов. Вот тестовый код, который у меня есть:
var guiPath = txtGuiPath.Text;
MessageBox.Show("Dumping File: " + guiPath);
try
{
var writer = new XmlTextWriter("client_settings.xml", null);
writer.WriteStartDocument();
writer.WriteComment("Config generated on 01/01/01");
writer.WriteStartElement("Config");
writer.WriteStartElement("GuiPath");
writer.WriteString(guiPath);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
MessageBox.Show("Finished Dumping");
Если guiPath пуст, я получаю следующий XML:
<?xml version="1.0"?>
<!--Config generated on 01/01/01-->
<Config>
<GuiPath />
</Config>
но если в guiPath есть какой-либо текст, то в файл ничего не записывается. Я даже могу удалить файл client_settings.xml и запускать этот код снова и снова, и файл XML никогда не генерируется, если guiPath не пуст. Передача чего-то вроде «Это тест» в WriteString () также работает.
Обновление
Поскольку я пытаюсь записать системный путь, похоже, это проблема. Если я удаляю все обратные косые черты, он будет правильно записывать полученную строку, но если я передам ее в WriteString или WriteCData, XML вообще не будет писать.
Обновление 2
Оказывается, причина того, что у меня было так много проблем, заключается в том, что файл XML генерировался по любому пути, указанному в guiPath, а не в каталоге, из которого запускалось приложение (так что для меня это выглядело как т генерируется вообще). Таким образом, если для параметра guiPath было установлено значение «C: \ Program Files \ externalApp \ appName.exe», он сохранял XML-файл как «C: \ ProgramFiles \ externalApp \ client_settings.xml» вместо папки запуска приложения. , Почему я не знаю. Я начал передавать Application.StartupPath и добавил к нему имя файла, и теперь оно прекрасно работает.
Спасибо за помощь!