Condividi tramite


Tempi file

Un tempo di file è un valore a 64 bit che rappresenta il numero di intervalli di 100 nanosecondi trascorsi dalle 12.00 del 1° gennaio 1601 utc (Coordinated Universal Time). Il sistema registra gli orari di file in cui le applicazioni creano, accedono e scrivono nei file.

Il file system NTFS archivia i valori di ora in formato UTC, pertanto non sono interessati dalle modifiche apportate al fuso orario o all'ora legale. Il file system FAT archivia i valori di ora in base all'ora locale del computer. Ad esempio, un file salvato alle 13:00 PST a Washington è visto come 19:00 EST a New York in un volume NTFS, ma è visto come 3:00 est a New York su un volume FAT.

I timestamp vengono aggiornati in vari momenti e per vari motivi. L'unica garanzia relativa a un timestamp del file è che l'ora del file viene riflessa correttamente quando l'handle che apporta la modifica viene chiuso.

Non tutti i file system possono registrare la creazione e l'ultima volta di accesso e non tutti i file system li registrano nello stesso modo. Ad esempio, la risoluzione del tempo di creazione in FAT è di 10 millisecondi, mentre il tempo di scrittura ha una risoluzione di 2 secondi e l'ora di accesso ha una risoluzione di 1 giorno, quindi è effettivamente la data di accesso. Il file system NTFS ritarda gli aggiornamenti all'ora dell'ultimo accesso per un file fino a 1 ora dopo l'ultimo accesso.

Per recuperare i tempi di file per un file specificato, usare la funzioneGetFileTime. GetFileTime copia la creazione, l'ultimo accesso e le ultime operazioni di scrittura nelle singole struttureFILETIME. È anche possibile recuperare i tempi di file usando le funzioni FindFirstFile e FindNextFile. Queste funzioni copiano i tempi di file in strutture FILETIME in una struttura WIN32_FIND_DATA. Quando si scrive in un file, l'ultima volta di scrittura non viene aggiornata completamente fino a quando non vengono chiusi tutti gli handle utilizzati per la scrittura.

Per impostare i tempi di file per un file, usare la funzionesetFileTime. Questa funzione consente di modificare la creazione, l'ultimo accesso e le ultime operazioni di scrittura senza modificare il contenuto del file. È possibile confrontare i tempi di file diversi usando la funzionecompareFileTime. La funzione confronta due volte il file e restituisce un valore che indica l'ora successiva o restituisce 0 (zero) se le volte sono uguali.

Se si prevede di modificare gli orari di file per i file specificati, è possibile convertire una data e un'ora del giorno in un'ora di file usando la funzioneSystemTimeToFileTime. È anche possibile ottenere l'ora di sistema in una struttura diFILETIMEchiamando la funzioneGetSystemTimeAsFileTime.

Per semplificare la visualizzazione di un file a un utente, usare la funzioneFileTimeToSystemTime. FileTimeToSystemTime converte l'ora del file e copia il mese, il giorno, l'anno e l'ora del giorno dall'ora del file a una strutturaSYSTEMTIME.

Ora file e ora legale

È necessario prestare attenzione quando si usano gli orari dei file se l'utente ha impostato il sistema per regolare automaticamente l'ora legale.

Per convertire un'ora file nell'ora locale, usare la funzionefileTimeToLocalFileTime. Tuttavia, FileTimeToLocalFileTime usa le impostazioni correnti per il fuso orario e l'ora legale. Pertanto, se è l'ora legale, prende in considerazione l'ora legale, anche se l'ora del file che si sta convertendo è in ora solare.

Il file system FAT registra le ore sul disco nell'ora locale. GetFileTime recupera le ore UTC memorizzate nella cache dal file system FAT. Quando diventa ora legale, l'ora recuperata da GetFileTime è disattivata un'ora, perché la cache non viene aggiornata. Quando si riavvia il computer, l'ora memorizzata nella cache che GetFileTime recuperata è corretta. FindFirstFile recupera l'ora locale dal file system FAT e la converte in formato UTC usando le impostazioni correnti per il fuso orario e l'ora legale. Pertanto, se è ora legale, FindFirstFile prende in considerazione l'ora legale, anche se l'ora file che si sta convertendo è in ora solare.

Il file system NTFS registra orari su disco in formato UTC. Per tenere conto dell'ora legale durante la conversione di un'ora file in un'ora locale, usare la sequenza di funzioni seguente anziché usare FileTimeToLocalFileTime:

Tempi di file e CDFS

I timestamp di data e ora dei file che si trovano in o provengono da supporti che usano CDFS (Compact Disc File System) vengono modificati per il fuso orario locale. ISO 9660 indica che CDFS deve visualizzare correttamente le informazioni sulla data per il fuso orario locale. Questa operazione viene eseguita in modo che le date per i file in CDFS vengano visualizzate come quelle in formato UDF (Universal Disk Format). La funzione definita dall'utente è lo standard più recente per i supporti di distribuzione. Se il codice dipende dalle informazioni sulla data non modificate per un file che risiede o proviene da supporti che usano CDFS, potrebbe non funzionare correttamente.