Cette documentation est archivée et n’est pas conservée.

DateTimeOffset.FromFileTime, méthode

Mise à jour : novembre 2007

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

Espace de noms :  System
Assembly :  mscorlib (dans mscorlib.dll)

public static DateTimeOffset FromFileTime(
	long fileTime
)
public static DateTimeOffset FromFileTime(
	long fileTime
)
public static function FromFileTime(
	fileTime : long
) : DateTimeOffset

Paramètres

fileTime
Type : System.Int64
Heure de fichier Windows, exprimée en graduations.

Valeur de retour

Type : System.DateTimeOffset
Objet DateTimeOffset représentant la date et l'heure du fileTime, l'offset étant égal à l'offset de l'heure locale.

ExceptionCondition
ArgumentOutOfRangeException

filetime est inférieur à zéro.

– ou –

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

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 après Jésus-Christ (notre ère) en temps universel coordonné (UTC). Windows utilise une heure d'enregistrement de fichier 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, ce qui retourne une structure FILETIME. Le paramètre de la fonction unique est le handle du fichier dont les informations relatives à l'heure du fichier doivent être récupérées. Le handle du fichier est récupéré en appelant la fonction CreateFile. Le membre dwHighDateTime de la structure FILETIME contient les quatre octets de poids fort de l'heure du fichier et le membre dwLowDateTime contient les quatre octets de poids faible. L'exemple suivant illustre la récupération des valeurs d'heure de fichier Windows et leur conversion en valeurs DateTimeOffset.

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

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

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


Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

.NET Framework

Pris en charge dans : 3.5 SP1, 3.0 SP1, 2.0 SP1
Afficher: