저는 파일의 날짜 메타 데이터를 생성 시간, 마지막으로 수정 한 시간 등과 같이 기록하는 프로그램에서 작업하고 있습니다. 이전 버전의 프로그램은 VBA로 작성되었으며 문제의 파일에 대한IO.File.GetLastAccessTime이 1 시간 만에 해제되었습니다.
Public Function GetFileLastAccessTime(ByVal FilePath As String) As Date
Dim fso As New Scripting.FileSystemObject
Dim f As Scripting.File
Set f = fso.GetFile(FilePath)
GetFileLastAccessTime = f.DateLastAccessed
End Function
출력 :이 같은 무언가를
나는 윈도우 찾아서에서 파일 속성에서 얻을 값입니다?getfilelastaccesstime("SomePath")
7/30/2010 2:16:07 PM
. 행복.
이 기능을 VB.Net 앱에 이식하고 있습니다. 새 코드 :
Public Function GetLastAccessTime(ByVal FilePath As String) As Date
Return IO.File.GetLastAccessTime(FilePath)
End Function
단순함. 출력 :
?GetLastAccessTime("SomePath")
#7/30/2010 3:16:07 PM#
1 시간 후.
두 기능이 동일한 컴퓨터에서 실행되어 동일한 파일을 검사합니다. 나는 또한 같은 결과를 가진 IO.FileInfo 클래스를 사용하여 시도했다. 나는 수천 개의 파일을 검사했고 그들은 모두 한 시간 씩 꺼져 있습니다. 생성 시간 및 최종 수정 시간에 대한 다른 날짜 속성도 한 시간 씩 해제됩니다.
도움말!
컴퓨터의 시간대는 CST이며 일광 절약 시간제는 현재 적용되지 않았습니다.
Windows 7 64 비트 및 Windows XP 32 비트에서 문제가 재현되었습니다.
감사합니다.
2011년 1월 6일 업데이트 : 적절한 시간대 오프셋을 사용하여 UTC에서 원하는 날짜를 계산하기 위해 노력하고 제안 모든 사람에게
감사합니다. 현재로서는 그렇게 할만한 가치가없는 것으로 결정하고 있습니다. 이 특정 비즈니스 요구 사항의 경우 날짜 값을 말하는 것이 API가 작동하는 방식이기 때문에 기대했던 것과 다릅니다. 내가 이것을 "고치려고"하면 나는 그것을 소유하고, 나는 차라리 그렇게하지 않을 것이다.
단지 킥을 위해 좋은 오래된 Scripting.FileSystemObject를 사용하여 interop을 사용해 보았습니다. Windows Explorer와 동의 한 예상 결과를 System.IO에 비해 약 5 배의 성능 저하로 제공합니다. 그것이 밝혀지면 나는 윈도우즈 탐색기가 가진 것과 일치하는 날짜를 얻어야한다. 나는 총알을 물고이 길로 갈 것이다.
내가 시도 또 다른 실험은 C#을 통해 KERNEL32에서 GetFileTime API 함수에 직접가는: 시간은 Windows 탐색기에서 시간 씩 System.IO가 정확하게 같은 행동의 결과
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool GetFileTime(
IntPtr hFile,
ref FILETIME lpCreationTime,
ref FILETIME lpLastAccessTime,
ref FILETIME lpLastWriteTime
);
했다 .
다시 한 번 감사드립니다.
는 – Flipster
마지막 액세스 시간은 약 1 시간 단위를 가지고 나에게 일광 절약 시간 문제처럼 보인다. 또한 Windows Vista 이상에서는 기본적으로 [마지막 액세스 시간 값이 NTFS 볼륨에서 기본적으로 업데이트되지 않습니다.] (http://blogs.technet.com/b/filecab/archive/2006/11/07)에 유의하십시오. /disabling-last-access-time-in-windows-vista-to-improve-ntfs-performance.aspx). –
DST가 유효하지 않지만 파일이 마지막으로 수정되었을 때 DST가 적용되었습니다. 누가 옳은가? 그 질문을하는 것을 피하기 위해 UTC에서 일하십시오. –