"TAMAÑO" Y "TAMAÑO EN DISCO" DIFERENTES

y2kbug
21 de Septiembre del 2005
Que tal estimados colegas, tengo realmente una duda de como hacer algo, a ver si me pueden ayudar:

Resulta que si ustedes le dan con el boton derecho a cualquier archivo (En windows) y le dan a PROPIEDADES entre otras cosas van a ver "Tamaño" y "Tamaño en disco"... y se darán cuenta que son diferentes... bueno resulta que trabajo con c++ Builder y con el API de windows lo unico que puedo extraer es el "tamaño" pero no existe propiedad o metodo alguno que me traiga la info de espacio en disco, no por lo menos con lo que estoy usando.

Aqui una copia de la pruebita que hice

void TForm1::Recorrer(AnsiString Ruta)
{
WIN32_FIND_DATA InfoTd;
int count = 0;

HANDLE Valor1 = FindFirstFile(Ruta.c_str(), &InfoTd);
BOOL Encontrado;
do
{
AnsiString NombreArchivo = InfoTd.cFileName;
int TamanoL = InfoTd.nFileSizeLow;
int TamanoH = InfoTd.nFileSizeHigh;
// FechaHoraAux = InfoTd.ftLastWriteTime;
ListBox1->Items->Add(NombreArchivo + " " + IntToStr(TamanoL) + " " + IntToStr(TamanoH));
Encontrado = FindNextFile(Valor1, &InfoTd);
} while(Encontrado);
FindClose(Valor1);
return;
}

Donde estos son las propiedades de WIN32_FIND_DATA

typedef struct _WIN32_FIND_DATA { // wfd
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[ MAX_PATH ];
TCHAR cAlternateFileName[ 14 ];
} WIN32_FIND_DATA;


Sé que la diferencia entre "tamaño" y "tamaño en disco" se debe al sistema de archivo lo que necesito es extraer o calcular este valor....

Alli les dejo ese paquetico...

Gracias