Запись путей к файлам в XML-файл с помощью XmlWriter - PullRequest
1 голос
/ 13 января 2012

Я надеюсь, что кто-нибудь может помочь мне с этой маленькой досадной проблемой, с которой я столкнулся. Я пытаюсь записать путь к файлу настроек XML, но ничего не происходит. Я не получаю никаких сообщений об ошибках или окон отладки Just in Time, он просто не выполняет этот блок кода.

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

Вот пример моей функции:

private void SaveSettings()
    {
        XmlWriterSettings xml_settings = new XmlWriterSettings();
        xml_settings.Indent = true;
        xml_settings.IndentChars = ("    ");

        using (XmlWriter xml_settings_file = XmlWriter.Create("settings.xml", xml_settings))
        {
            xml_settings_file.WriteStartElement("Main_Node");
            xml_settings_file.WriteElementString("SettingA", Properties.Settings.Default.SettingA.ToString());
            xml_settings_file.WriteElementString("SettingB", Properties.Settings.Default.SettingB.ToString());
            xml_settings_file.WriteElementString("SettingC", Properties.Settings.Default.SettingC.ToString());

            for (int i = 1; i < Properties.Settings.Default.UserAccounts.Count; i++)
            {
                xml_settings_file.WriteElementString("Account", System.Security.SecurityElement.Escape(Properties.Settings.Default.UserAccounts[i].ToString()));
                xml_settings_file.WriteElementString("File", System.Security.SecurityElement.Escape(Properties.Settings.Default.FilePaths[i]));
            }

            xml_settings_file.WriteEndElement();
            xml_settings_file.Flush();
        }

    }

Чтобы еще больше запутать, когда я заменяю переменную FilePath простой строкой "Test", она работает нормально, и файл создается без проблем.

Ответы [ 2 ]

1 голос
/ 13 января 2012

Пожалуйста, попробуйте использовать CDATA вместо экранирования символов пути.

Вы можете заменить:

xml_settings_file.WriteElementString("File", System.Security.SecurityElement.Escape(Properties.Settings.Default.FilePaths[i]));

со следующими строками:

xml_settings_file.WriteStartElement("File");
xml_settings_file.WriteCData(Properties.Settings.Default.FilePaths[i]);
xml_settings_file.WriteEndElement();
0 голосов
/ 16 января 2012

Это еще предстоит решить.Я просто использовал встроенные настройки приложения.

...