[C con Clase] Saber espacio libre en disco

Davidson, Steven srd4121 en njit.edu
Mar Jun 2 23:28:33 CEST 2015


Hola User,

El error está en que conviertes un tipo de 'ULONGLONG', que el API de
MS-Windows define para representar un tipo entero sin signo de 64 bits, a
un 'int' que seguramente representa un entero (con signo) de 32 bits. Esto
significa que perderás bits de información obteniendo un resultado bastante
diferente al esperado.

C++ ofrece el tipo de dato 'unsigned long long int', por lo que no deberías
tener problemas con 'ULONGLONG'. Simplemente, usa el valor guardado
directamente en 'cout <<'; por ejemplo,

cout << "Free drive space: " << freeBytesToCaller.QuadPart << "Bytes" <<
endl;

También ten presente que 'freeBytesToCaller' contendrá la cantidad de bytes
disponible para el usuario en la sesión de MS-Windows que ejecuta este
programa. Esto implica que puede haber cuotas para limitar la cantidad
adjudicada de espacio disponible a tal usuario y por tanto no reflejará
necesariamente la cantidad "real" disponible de bytes en el volumen o disco.

Espero haber aclarado la duda.

Steven


On Tue, Jun 2, 2015 at 11:39 AM, User <usuarioanonimomysql en gmail.com> wrote:

> Hola,
>
>
> Estoy tratando de obtener el espacio libre de una unidad de disco. Ejecuto lo siguiente:
>
>
>     LPCWSTR drive=L"C:\\";
>
>     ULARGE_INTEGER freeBytesToCaller;
>     freeBytesToCaller.QuadPart = 0L;
>
>     if( !GetDiskFreeSpaceEx( drive, &freeBytesToCaller, NULL, NULL ) )
>     {
>     cout << "ERROR: Call to GetDiskFreeSpaceEx() failed." << endl;
>     }
>
>     int freeSpace_gb = freeBytesToCaller.QuadPart;
>     cout << "Free drive space: " << freeSpace_gb << "Bytes" << endl;
>
>
> Pero freeSpace_gb me da un valor de 1634967552 cuando solo tengo 9 GB libres.
>
>
> ¿Qué problema hay?
>
>
> Gracias.
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150602/f39cb09b/attachment.html>


Más información sobre la lista de distribución Cconclase