DateTimeOffset.FromFileTime(Int64) 메서드

정의

지정한 Windows 파일 시간을 해당 현지 시간으로 변환합니다.Converts the specified Windows file time to an equivalent local time.

public:
 static DateTimeOffset FromFileTime(long fileTime);
public static DateTimeOffset FromFileTime (long fileTime);
static member FromFileTime : int64 -> DateTimeOffset
Public Shared Function FromFileTime (fileTime As Long) As DateTimeOffset

매개 변수

fileTime
Int64

틱으로 표현된 Windows 파일 시간입니다.A Windows file time, expressed in ticks.

반환

현지 시간 오프셋으로 설정된 오프셋을 사용하여 fileTime의 날짜와 시간을 표현하는 개체입니다.An object that represents the date and time of fileTime with the offset set to the local time offset.

예외

filetime가 0보다 작은 경우filetime is less than zero.

-또는--or- filetimeDateTimeOffset.MaxValue.Ticks보다 큰 경우filetime is greater than DateTimeOffset.MaxValue.Ticks.

예제

다음 예제에서는 워드 패드 실행 파일에 대 한 Windows 파일 시간을 검색 하는 Windows API를 사용 합니다.The following example uses the Windows API to retrieve the Windows file times for the WordPad executable.

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
Imports System.IO

Public Structure FileTime
   Public dwLowDateTime As UInteger
   Public dwHighDateTime As UInteger

   Public Shared Widening Operator CType(fileTime As FileTime) As Long
      Dim returnedLong As Long
      ' Convert 4 high-order bytes to a byte array
      Dim highBytes() As Byte = BitConverter.GetBytes(fileTime.dwHighDateTime)
      ' Resize the array to 8 bytes (for a Long)
      ReDim Preserve highBytes(7)

      ' 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 Or fileTime.dwLowDateTime
      ' Return Long 
      return returnedLong
   End Operator
End Structure

Module modMain
   Private Const OPEN_EXISTING As Integer = 3
   
   Private Const INVALID_HANDLE_VALUE As Integer = -1
      
   Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
                            ByVal lpFileName As String, _
                            ByVal dwDesiredAccess As Integer, _
                            ByVal dwShareMode As Integer, _
                            ByVal lpSecurityAttributes As Integer, _
                            ByVal dwCreationDisposition As Integer, _
                            ByVal dwFlagsAndAttributes As Integer, _
                            ByVal hTemplateFile As Integer) _
           As Integer

   Private Declare Function GetFileTime Lib "Kernel32"( _
                            hFile As Integer, _
                            ByRef lpCreationTime As FileTime, _
                            ByRef lpLastAccessTime As FileTime, _
                            ByRef lpLastWriteTime As FileTime) _
            As Boolean 

   Private Declare Function CloseHandle Lib "Kernel32" ( _
                            hFile As Integer) _
           As Boolean
                        
   Public Sub Main()
      ' Open file %windir%\write.exe
      Dim winDir As String = Environment.SystemDirectory 
      If Not winDir.EndsWith(Path.DirectorySeparatorChar) Then _
         winDir += Path.DirectorySeparatorChar 
      windir += "write.exe"

      ' Get file time using Windows API
      '
      ' Open file
      Dim hFile As Integer = CreateFile(winDir, 0, 0, 0, _
                                       OPEN_EXISTING, 0, 0)
      If hFile = INVALID_HANDLE_VALUE Then
         Console.WriteLine("Unable to access {0}.", winDir)
      Else
         Dim creationTime, accessTime, writeTime As FileTime
         If GetFileTime(hFile, creationTime, accessTime, writeTime) Then
            CloseHandle(hFile)
            Dim fileCreationTime As Long = CType(creationTime, Long)
            Dim fileAccessTime As Long = CType(accessTime, Long)
            Dim fileWriteTime As Long = CType(writeTime, Long)

            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() 
         End If   
      End If
      
      ' Get date and time, convert to file time, then convert back
      Dim fileInfo As New FileInfo(winDir)
      Dim infoCreationTime, infoAccessTime, infoWriteTime As DateTimeOffset
      Dim ftCreationTime, ftAccessTime, ftWriteTime As Long
      
      ' 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()) 
   End Sub
End Module
' 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

설명

Windows 파일 시간은 서 기 1601 년 1 월 1 일 자정 12 시 이후 경과한 100 나노초 간격의 수를 나타내는 64 비트 값A Windows file time is a 64-bit value that represents the number of 100-nanosecond intervals that have elapsed since 12:00 midnight, January 1, 1601 A.D. 그레고리오력에서 서 기 UTC (협정 세계시).(C.E.) Coordinated Universal Time (UTC). Windows 파일 시간을 사용 하 여 애플리케이션 액세스를 만들거나 파일을 쓸 때 기록.Windows uses a file time to record when an application creates, accesses, or writes to a file.

Windows 파일 시간은 FILETIME 구조체를 반환 하는 GetFileTime 함수를 호출 하 여 Windows API를 통해 직접 액세스할 수 있습니다.A Windows file time is directly accessible through the Windows API by calling the GetFileTime function, which returns a FILETIME structure. 단일 함수 매개 변수는 해당 파일 시간 정보를 검색할 파일의 핸들입니다.The single function parameter is the handle of the file whose file time information is to be retrieved. CreateFile 함수를 호출 하 여 파일 핸들을 검색 합니다.The file handle is retrieved by calling the CreateFile function. FILETIME 구조체의 dwHighDateTime 멤버는 파일 시간의 상위 바이트 4 개를 포함 하며, 해당 dwLowDateTime 멤버는 네 개의 하위 바이트를 포함 합니다.The FILETIME structure's dwHighDateTime member contains the four high-order bytes of the file time, and its dwLowDateTime member contains the four low-order bytes. 다음 예제에서는 Windows 파일 시간 값을 검색 하 여 DateTimeOffset 값으로 변환 하는 방법을 보여 줍니다.The example that follows illustrates how to retrieve Windows file time values and convert them to DateTimeOffset values.

DateTime.ToFileTimeDateTime.ToFileTimeUtc 메서드를 호출 하 고 DateTimeOffset.ToFileTime 메서드를 호출 하 여 DateTimeOffset 값에서 Windows 파일 시간 값을 DateTime 만들 수도 있습니다.Windows file time values can also be created from DateTime values by calling the DateTime.ToFileTime and DateTime.ToFileTimeUtc methods, and from DateTimeOffset values by calling the DateTimeOffset.ToFileTime method.

적용 대상