Возможно, начальное значение суммы меньше 1024 2 байтов? Когда вы выполняете целочисленное деление, результат будет переигран, поэтому все, что меньше 1024 2 байтов, вернет ноль.
Например, пример файла NZB @ wikipedia выдаст 0 при запуске через ваш алгоритм.
EDIT:
После проверки «плохих» файлов (на самом деле, это «хороший» файл, который не соответствует спецификации), причина, по которой он не работает, заключается в том, что пространство имен по умолчанию корневого элемента равно "http://www.newzbin.com/DTD/2003/nzb"
, что означает любой дочерний элемент узлы будут наследовать это пространство имен.
Это означает, что ваш запрос .Descendants("segment")
не возвращает узлов. Прикрепление правильного пространства имен устраняет проблему.
Ниже показано, как вы можете изменить свой код для чтения такого файла.
private int ProcessNzb(string sFilename)
{
XDocument xDoc = XDocument.Load(sFilename);
return xDoc
.Descendants(xDoc.Root.Name.Namespace + "segment")
.Sum(x => (int) x.Attribute("bytes")) / 1024 / 1024;
}
Кроме того, я бы не стал публиковать файлы, которые предполагают участие в контрабанде.