Lire en anglais

Partager via


DateTimeOffset.FromFileTime(Int64) Méthode

Définition

Convertit l’heure de fichier Windows spécifiée en heure locale équivalente.

C#
public static DateTimeOffset FromFileTime(long fileTime);

Paramètres

fileTime
Int64

Heure d’un fichier Windows, exprimée en cycles.

Retours

Objet qui représente la date et l’heure de fileTime avec le décalage défini sur le décalage de l’heure locale.

Exceptions

fileTime est inférieur à zéro.

-ou-

fileTime est supérieur à DateTimeOffset.MaxValue.Ticks.

Exemples

L’exemple suivant utilise l’API Windows pour récupérer les heures de fichier Windows pour l’exécutable WordPad.

C#
using System;
using System.IO;
using System.Runtime.InteropServices;

public struct FileTime
{
   public uint dwLowDateTime;
   public uint dwHighDateTime;

   public static implicit operator long(FileTime fileTime)
   {
      long returnedLong;
      // Convert 4 high-order bytes to a byte array
      byte[] highBytes = BitConverter.GetBytes(fileTime.dwHighDateTime);
      // Resize the array to 8 bytes (for a Long)
      Array.Resize(ref highBytes, 8);

      // Assign high-order bytes to first 4 bytes of Long
      returnedLong = BitConverter.ToInt64(highBytes, 0);
      // Shift high-order bytes into position
      returnedLong = returnedLong << 32;
      // Or with low-order bytes
      returnedLong = returnedLong | fileTime.dwLowDateTime;
      // Return long
      return returnedLong;
   }
}

public class FileTimes
{
   private const int OPEN_EXISTING = 3;
   private const int INVALID_HANDLE_VALUE = -1;

   [DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
   private static extern int CreateFile(string lpFileName,
                                       int dwDesiredAccess,
                                       int dwShareMode,
                                       int lpSecurityAttributes,
                                       int dwCreationDisposition,
                                       int dwFlagsAndAttributes,
                                       int hTemplateFile);

   [DllImport("Kernel32.dll")]
   private static extern bool GetFileTime(int hFile,
                                          out FileTime lpCreationTime,
                                          out FileTime lpLastAccessTime,
                                          out FileTime lpLastWriteTime);

   [DllImport("Kernel32.dll")]
   private static extern bool CloseHandle(int hFile);

   public static void Main()
   {
      // Open file %windir%\write.exe
      string winDir = Environment.SystemDirectory;
      if (!(winDir.EndsWith(Path.DirectorySeparatorChar.ToString())))
         winDir += Path.DirectorySeparatorChar;
      winDir += "write.exe";

      // Get file time using Windows API
      //
      // Open file
      int hFile = CreateFile(winDir, 0, 0, 0, OPEN_EXISTING, 0, 0);
      if (hFile == INVALID_HANDLE_VALUE)
      {
         Console.WriteLine("Unable to access {0}.", winDir);
      }
      else
      {
         FileTime creationTime, accessTime, writeTime;
         if (GetFileTime(hFile, out creationTime, out accessTime, out writeTime))
         {
            CloseHandle(hFile);
            long fileCreationTime = (long) creationTime;
            long fileAccessTime = accessTime;
            long fileWriteTime = (long) writeTime;

            Console.WriteLine("File {0} Retrieved Using the Windows API:", winDir);
            Console.WriteLine("   Created:     {0:d}", DateTimeOffset.FromFileTime(fileCreationTime).ToString());
            Console.WriteLine("   Last Access: {0:d}", DateTimeOffset.FromFileTime(fileAccessTime).ToString());
            Console.WriteLine("   Last Write:  {0:d}", DateTimeOffset.FromFileTime(fileWriteTime).ToString());
            Console.WriteLine();
         }
      }

      // Get date and time, convert to file time, then convert back
      FileInfo fileInfo = new FileInfo(winDir);
      DateTimeOffset infoCreationTime, infoAccessTime, infoWriteTime;
      long ftCreationTime, ftAccessTime, ftWriteTime;

      // Get dates and times of file creation, last access, and last write
      infoCreationTime = fileInfo.CreationTime;
      infoAccessTime = fileInfo.LastAccessTime;
      infoWriteTime = fileInfo.LastWriteTime;
      // Convert values to file times
      ftCreationTime = infoCreationTime.ToFileTime();
      ftAccessTime = infoAccessTime.ToFileTime();
      ftWriteTime = infoWriteTime.ToFileTime();

      // Convert file times back to DateTimeOffset values
      Console.WriteLine("File {0} Retrieved Using a FileInfo Object:", winDir);
      Console.WriteLine("   Created:     {0:d}", DateTimeOffset.FromFileTime(ftCreationTime).ToString());
      Console.WriteLine("   Last Access: {0:d}", DateTimeOffset.FromFileTime(ftAccessTime).ToString());
      Console.WriteLine("   Last Write:  {0:d}", DateTimeOffset.FromFileTime(ftWriteTime).ToString());
   }
}
// The example produces the following output:
//    File C:\WINDOWS\system32\write.exe Retrieved Using the Windows API:
//       Created:     10/13/2005 5:26:59 PM -07:00
//       Last Access: 3/20/2007 2:07:00 AM -07:00
//       Last Write:  8/4/2004 5:00:00 AM -07:00
//
//    File C:\WINDOWS\system32\write.exe Retrieved Using a FileInfo Object:
//       Created:     10/13/2005 5:26:59 PM -07:00
//       Last Access: 3/20/2007 2:07:00 AM -07:00
//       Last Write:  8/4/2004 5:00:00 AM -07:00

Remarques

Une heure de fichier Windows est une valeur 64 bits qui représente le nombre d’intervalles de 100 nanosecondes qui se sont écoulés depuis 12:00 minuit, le 1er janvier 1601 A.D. (C.E.) Temps universel coordonné (UTC). Windows utilise une heure de fichier pour enregistrer lorsqu’une application crée, accède ou écrit dans un fichier.

Une heure de fichier Windows est directement accessible via l’API Windows en appelant la fonction GetFileTime, qui retourne une structure FILETIME. Le paramètre de fonction unique est le handle du fichier dont les informations de temps de fichier doivent être récupérées. Le handle de fichier est récupéré en appelant la fonction CreateFile. Le membre dwHighDateTime de la structure FILETIME contient les quatre octets de l’heure du fichier, et son membre dwLowDateTime contient les quatre octets de bas ordre. L’exemple suivant illustre comment récupérer des valeurs de temps de fichier Windows et les convertir en valeurs DateTimeOffset.

Les valeurs de temps de fichier Windows peuvent également être créées à partir de valeurs DateTime en appelant les méthodes DateTime.ToFileTime et DateTime.ToFileTimeUtc, et à partir de DateTimeOffset valeurs en appelant la méthode DateTimeOffset.ToFileTime.

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0