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)