winapi - timestamp dei file senza senso?
Domanda
Non riesco a ottenere un timestamp affidabile usando le funzioni di Winapi. Ad esempio:
int main(int argc, char *argv[]) { HANDLE file; BY_HANDLE_FILE_INFORMATION finfo; SYSTEMTIME systime; file = CreateFile("test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); GetFileInformationByHandle(file,&finfo); FileTimeToSystemTime(&finfo.ftLastWriteTime, &systime); printf(" %s %02d:%02d:%02d %d/%d/%d\n", "test.txt", systime.wHour,systime.wMinute,systime.wSecond,systime.wDay,systime.wMonth,systime.wYear); }
dà un senso a tutti i miei file come:
test.txt 00:03:30 33/5/3
wDay sembra avere valori al di fuori dell'intervallo 1-31 e gli orari e le date sono totalmente sbagliati. Tutti gli altri valori in BY_HANDLE_FILE_INFORMATION come nome e dimensione sono corretti, e nel codice completo controllo gli errori di tutte le funzioni, ma tutti restituiscono. Qualcuno sa cosa sto facendo di sbagliato?
Soluzione
Penso che il problema sia l'uso di filesize.QuadPart
. Prova a rimuoverlo sia dalla stringa di formato che dall'elenco degli argomenti e verifica se funziona.
Se questo aiuta, cerca la stringa di formato corretta da utilizzare per una quantità a 64 bit in printf ()
.