FormatException, преобразование строки в длинный

Я получал значения из файла XML и помещал их в dataGridView, Мне это удалось, но после того, как я хочу манипулировать данными, полученными из файла XML, он не работает, и я получаю сообщение об ошибке Input string was not in a correct format.,

Моя цель - преобразовать данные, захваченные из файла XML, и разделить их на 1024. InnerText Строка, которую я могу безопасно преобразовать в длинный? я должен добавить больше кода, чтобы сделать эту работу?

Во время отладки я распечатал значение temp и значение 53999759360, я также пытался не делать это ToString(), та же ошибка

Вот часть моего кода: (значение размера "53999759360")

        XmlDocument doc = new XmlDocument();
        string xmlFilePath = @"C:\xampp\htdocs\userInfo.xml";
        doc.Load(xmlFilePath);

        XmlNodeList accountList = doc.GetElementsByTagName("account");

        foreach (XmlNode node in accountList)
        {
            XmlElement accountElement = (XmlElement)node;

            foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
            {
                String temp = (dskInterface["size"].InnerText).ToString();
                long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
            }
        }

1 ответ

Решение

Боюсь, что ваш код работает нормально. Должно быть, что переменная "temp" является string.Empty или пробелом.

Я создал XmlDocument (из XDocument, извините. Мне кажется, с ним намного проще работать), который выглядит как то, на что вы нацелены, и запустил ваш код. Он работает нормально и дает правильное значение:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}

Изменить: Вот простой способ проверить, что на самом деле происходит:

Convert.ToInt64(null); // Doesn't crash
Convert.ToInt64(string.Empty); // Crashes
Convert.ToInt64(""); // Will crash if you comment the line above
Convert.ToInt64(" "); // Will crash if you comment the lines above
Другие вопросы по тегам