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
per memorizzarlo in una stringa.codice:wsprintf (fs, "%I64u", fz);
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:
cioè uso un puntatore h per accedere alla parte alta dell'intero a 64bit...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); ..... ..... }
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)

Rispondi quotando