|
|
 |
« on: December 17, 2009, 01:26:49 PM » |
|
Hola.
He estado mirando el modulo del free disk, en un principio funciona bien y te devuelve el valor en Mb. hasta aqui todo bien.
El problema que he encontrado es cuando el espacio libre son gigas, entonces te retorna un valor "falso", en mi caso tengo en la C: 139 Gigas libres y el agente me dice 3,794 Megas, el resto de unidades las hace bien.
Entonces se me ha ocurrido mirar los includes, y la consulta wmi la hace bien. pandora_wmi.cc ... Pandora_Wmi::getDiskFreeSpace ... query = "SELECT Size, FreeSpace FROM Win32_LogicalDisk WHERE DeviceID = \"" + disk_id + "\""; ...
el problema biene cuando: line: 168 space = Pandora_Strutils::strtoulong (space_str);
que llama al conversor.
pandora_strutils.cc Pandora_Strutils::strtoulong (const string str) { unsigned long long result;
if (! std::sscanf (str.c_str (), "%I64d", &result)) { throw Invalid_Conversion (); }
return result; }
que por lo que yo entiendo es un long int, que a mi entender tiene de rango
signed -> −2,147,483,648 to 2,147,483,647 unsigned -> 0 to 4,294,967,295
con lo cual un valor de 150,003,126,272 se pasa de largo.
Si me equivoco corregidme, gracias
Saludos
|