INFORMAZIONI: Utilizzo della struttura FILETIME

Traduzione articoli Traduzione articoli
Identificativo articolo: 188768 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Ora di un file rappresenta la data specifica e l'ora in cui un determinato file Ŕ stato creato, ultimo accesso o l'ultima scrittura. Ora di un file viene archiviata in una struttura FILETIME. Questa struttura viene utilizzata con varie chiamate all'API Win32.

Informazioni

Struttura FILETIME rappresenta il numero di intervalli di 100 nanosecondi a partire dal 1 gennaio 1601. La struttura costituita da due valori a 32 bit che combinano per formare un singolo valore a 64 bit.
   typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
   } FILETIME;
				
si noti che la struttura FILETIME Ŕ basata sulla intervalli da 100 nanosecondi. ╚ utile definire i simboli riportati di seguito quando si utilizzano file volte. Ad esempio:
   #define _SECOND ((int64) 10000000)
   #define _MINUTE (60 * _SECOND)
   #define _HOUR   (60 * _MINUTE)
   #define _DAY    (24 * _HOUR)
				

Esecuzione Arithmetics con tempi di file

Spesso Ŕ necessario eseguire un semplice operazioni aritmetiche sui tempi di file. Ad esempio, Ŕ necessario sapere quando un file Ŕ 30 giorni. Per eseguire aritmetica su un'ora del file, Ŕ necessario convertire FILETIME in un quadword (un integer a 64 bit), eseguire i calcoli e quindi convertire il risultato nuovamente in un FILETIME.

Se ft Ŕ una struttura FILETIME contenente l'ora di creazione di un file, il codice di esempio riportato di seguito aggiunge 30 giorni al tempo di:
   ULONGLONG qwResult;

   // Copy the time into a quadword.
   qwResult = (((ULONGLONG) ft.dwHighDateTime) << 32) + ft.dwLowDateTime;

   // Add 30 days.
   qwResult += 30 * _DAY;

   // Copy the result back into the FILETIME structure.
   ft.dwLowDateTime  = (DWORD) (qwResult & 0xFFFFFFFF );
   ft.dwHighDateTime = (DWORD) (qwResult >> 32 );
				

Impostazione di tempi di file

╚ possibile impostare gli orari di file per un file utilizzando la funzione SetFileTime().
   BOOL SetFileTime(
     HANDLE hFile,                     // Handle to the file.
     CONST FILETIME *lpCreationTime,   // Time the file was created.
     CONST FILETIME *lpLastAccessTime, // Time the file was last accessed.
     CONST FILETIME *lpLastWriteTime   // Time the file was last
                                       // written to.
   );
				
questa funzione consente di modificare la creazione, ultimo accesso e ora dell'ultima scrittura senza modificare il contenuto del file. Per utilizzare questa funzione, Ŕ necessario un handle al file aperto. ╚ possibile ottenere l'handle di file da una chiamata a CreateFile() o OpenFile(). Il file deve essere aperto con accesso GENERIC_WRITE. Dopo avere impostati i tempi di file, Ŕ necessario rilasciare l'handle di file tramite una chiamata a CloseHandle().

Presupponendo che szFilename Ŕ un nome di file valido e ft Ŕ una struttura FILETIME, nell'esempio di codice riportato di seguito imposta la data di creazione per il file al momento contenuti in ft:
   BOOL bResult;
   HANDLE hFile = CreateFile( szFilename,
      GENERIC_WRITE, // The file must be opened with write access.
      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL );

   if (hFile != INVALID_HANDLE_VALUE) {
      bResult = SetFileTime( hFile, &ft, NULL, NULL );
      CloseHandle(hFile);
   }
				

Visualizzazione di File Times

L'ora del file in base universale ora UTC (Coordinated Time). Basato sull'ora TUC ora Ŕ definito come la data corrente e l'ora del giorno in GMT, Inghilterra. SarÓ probabilmente necessario visualizzare l'ora file rispetto all'ora locale (ovvero la data e ora del giorno per il fuso orario). Per effettuare questa operazione, Ŕ possibile utilizzare FileTimeToLocalFileTime() come segue:
   BOOL FileTimeToLocalFileTime(
     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.
     LPFILETIME lpLocalFileTime   // Pointer to converted file time.
   );
nota che questa funzione utilizza le impostazioni correnti per il fuso orario e l'ora legale. Di conseguenza, se si tratta di ora legale, questa funzione verrÓ considerare ora legale, anche se il tempo che si sta convertendo Ŕ in orario standard.

Per visualizzare l'ora del file in modo significativo, Ŕ necessario convertirlo in un'ora di sistema utilizzando FileTimeToSystemTime() come indicato di seguito:
   BOOL FileTimeToSystemTime(
     CONST FILETIME *lpFileTime, // Pointer to file time to convert.
     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive
   );                            // system time.
				
struttura SYSTEMTIME il rappresenta una data e un'ora utilizzando i singoli membri per il mese, giorno, anno, giorno, ora, minuto, secondo e millisecondi.

╚ inoltre preferibile per visualizzare la data e l'ora in un formato coerente con la lingua corrente selezionata per il sistema. Per farlo utilizzando GetDateFormat() e GetTimeFormat() come segue:
   int GetDateFormat(
     LCID Locale,              // Locale for which date is to be formatted.
     DWORD dwFlags,            // Flags specifying function options.
     CONST SYSTEMTIME *lpDate, // Date to be formatted.
     LPCTSTR lpFormat,         // Date format string.
     LPTSTR lpDateStr,         // Buffer for storing formatted string.
     int cchDate               // Size of buffer.
   );

   int GetTimeFormat(
     LCID Locale,              // Locale for which time is to be formatted.
     DWORD dwFlags,            // Flags specifying function options.
     CONST SYSTEMTIME *lpTime, // Time to be formatted.
     LPCTSTR lpFormat,         // Time format string.
     LPTSTR lpTimeStr,         // Buffer for storing formatted string.
     int cchTime               // Size of buffer.
   );
				
per passa LOCALE_USER_DEFAULT come primo parametro a queste funzioni, Ŕ indicare formato passata data/ora in base al formato predefinito per le impostazioni internazionali correnti. In questo caso, Ŕ possibile passare NULL per i parametri lpFormat.

Se ft Ŕ una struttura FILETIME contenente un valore UTC, nell'esempio di codice riportato di seguito stampa la data memorizzata in ft:
   SYSTEMTIME st;
   char szLocalDate[255], szLocalTime[255];

   FileTimeToLocalFileTime( &ft, &ft );
   FileTimeToSystemTime( &ft, &st );
   GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL,
     szLocalDate, 255 );
   GetTimeFormat( LOCALE_USER_DEFAULT, 0, &st, NULL, szLocalTime, 255 );
   printf( "%s %s\n", szLocalDate, szLocalTime );
				

ProprietÓ

Identificativo articolo: 188768 - Ultima modifica: martedý 23 gennaio 2007 - Revisione: 3.3
Le informazioni in questo articolo si applicano a:
  • Microsoft Win32 Application Programming Interfaceáalle seguenti piattaforme
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Chiavi:á
kbmt kbapi kbdatetime kbfileio kbinfo kbkernbase KB188768 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 188768
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com