[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