Condividi tramite


Tempi di file

Un tempo di file è un valore a 64 bit che rappresenta il numero di intervalli di 100 nanosecondi trascorsi dalle 12:00 A.M. 1, 1601 Coordinated Universal Time (UTC). Il file di sistema registra i tempi in cui le applicazioni creano, accedono e scrivono ai file.

Il file system NTFS archivia i valori di ora in formato UTC, quindi 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 3:00 PST di Washington viene visto come 6:00 EST in un volume NTFS, ma viene visto come 3:00pm EST in un volume FAT.

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

Non tutti i file system possono registrare la creazione e gli ultimi tempi 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 il tempo di accesso ha una risoluzione di 1 giorno, quindi è veramente la data di accesso. Il file system NTFS ritarda gli aggiornamenti all'ultima ora di accesso per un file fino a 1 ora dopo l'ultimo accesso.

Per recuperare i tempi di file per un file specificato, usare la funzione GetFileTime . GetFileTime copia la creazione, l'ultimo accesso e gli ultimi tempi di scrittura in singole strutture FILETIME . È anche possibile recuperare i tempi di file usando le funzioni FindFirstFile e FindNextFile . Queste funzioni copiano i tempi di file nelle strutture FILETIME in una struttura WIN32_FIND_DATA . Quando si scrive in un file, l'ultima ora di scrittura non viene aggiornata completamente finché non vengono chiusi tutti gli handle usati per la scrittura.

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

Se si prevede di modificare i tempi di file per i file specificati, è possibile convertire una data e un'ora del giorno in un'ora di file usando la funzione SystemTimeToFileTime . È anche possibile ottenere l'ora di sistema in una struttura FILETIME chiamando la funzione GetSystemTimeAsFileTime .

Per semplificare la visualizzazione di un file a un utente, usare la funzione FileTimeToSystemTime . FileTimeToSystemTime converte l'ora del file e copia il mese, il giorno, l'anno e l'ora del giorno dal momento del file a una struttura SYSTEMTIME .

Orario file e ora legale

È necessario prestare attenzione quando si usano i tempi di file se l'utente ha impostato il sistema per regolare automaticamente l'ora legale.

Per convertire un'ora di file in ora locale, usare la funzione FileTimeToLocalFileTime . Tuttavia, FileTimeToLocalFileTime usa le impostazioni correnti per il fuso orario e l'ora legale. Pertanto, se si tratta dell'ora legale, l'ora legale richiede l'ora legale, anche se l'ora del file che si sta convertendo è in orario standard.

Il file system FAT registra i tempi su disco in ora locale. GetFileTime recupera gli orari UTC memorizzati 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 recuperata da GetFileTime è 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 si tratta dell'ora legale, FindFirstFile prende in considerazione l'ora legale, anche se l'ora del file che si sta convertendo è in orario standard.

I record del file system NTFS sul 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 valori di data e ora dei file che si trovano in o provengono dal supporto usando Compact Disc File System (CDFS) 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 disco universale (UDF). UDF è lo standard più recente per i supporti di distribuzione. Se il codice dipende dalle informazioni sulla data non modificate per un file che risiede in o proviene da supporti che usano CDFS, potrebbe non funzionare correttamente.