Il mio problema è questo:
Le proprietà di un file sotto windows sono restituite in una struttura WIN32_FIND_DATA.
Al suo interno due DWORD contengono i 32 bit alti e i 32 bit bassi che rappresentano le dimensioni a 64bit del file (nFileSizeLow e nFileSizeHigh);
Come faccio a stampare la dimensione totale?
Avevo pensato di usare un tipo __int64 (fz nell'esempio sotto) in cui memorizzare le due parti ed usare
codice:
wsprintf (fs, "%I64u", fz);
per memorizzarlo in una stringa.
Il problema è che se cerco di assegnare alla variabile di tipo __int64 un valore a più di 32 bit il compilatore (Dev-cpp) mi dice che è troppo grande per un tipo long.
In pratica il compilatore me lo considera come un semplice long.
In realtà un sizeof() sulla variabile rileva che effettivamente vengono allocati 8 byte!!!
Per riuscire nel mio scopo ho dovuto fare una cosa un po' macchinosa:
codice:
void Report (WIN32_FIND_DATA FData)
{
char fs[50];
__int64 fz;
DWORD *h;
h=(DWORD *)&fz;
h++;
fz=FData.nFileSizeLow;
*h=FData.nFileSizeHigh;
wsprintf (fs, "%I64u", fz);
.....
.....
}
cioè uso un puntatore h per accedere alla parte alta dell'intero a 64bit...
Non posso indirizzare direttamente con un puntatore int64 la zona della struttura contenente nFileSizeLow e nFileSizeHigh poiche questi (ovviamente!) sono memorizzati in posizioni invertite (nFileSizeLow si troverebbe nella parte alta e viceversa...)
Ma è possibile che non esista un metodo più semplice?
Non ho trovato API che stampino la dimensione o gestiscano gli int64 (escludento l'ambiente .net che non mi interessa)