Отображение временной метки NTFS с детализацией 100 нс

Я понимаю, что файловая система FAT хранит свои метки времени для файлов (дата изменения и т. Д.) С точностью 2 секунды, а NTFS сохраняет их с точностью 100 нсек.

Я использую VBScript с FileSystemObject, чтобы показать детали файла. Функция file.DateLastModified показывает мне дату с точностью до 1 секунды (в NTFS).

Есть ли способ показать метки времени с точностью в соответствии с гранулярностью внутренней памяти NTFS. Я представляю что-то вроде 9/9/2010 14:40:30,1234567

А если бы не VBScript / FileSystemObject, был бы другой путь?

2 ответа

Решение

Временные метки файлов хранятся в формате FILETIME в NTFS, но миллисекундная часть не передается в вариант DateTime, поэтому VBS не видит его. Объект WMI может поддерживать это все же.

Sub PrintTimestamp(sFilename)
  Set oWMI = GetObject("winmgmts:!\\.\root\cimv2")
  Set oFiles = oWMI.ExecQuery("Select * from CIM_DataFile where Name = '" & sFilename & "'")
  Set oDateTime = CreateObject("WbemScripting.SWbemDateTime")
  For Each oFile in oFiles
    oDateTime.Value = oFile.LastAccessed
    WScript.Echo oFile.Name & " " & oDateTime.GetVarDate & " " & oDateTime.Microseconds
  Next
End Sub
PrintTimestamp("c:\\temp\\demo.vbs")

Время файлов с полной точностью легко доступно через собственный Windows API. Эта статья MSDN объясняет, как это сделать: File Times.

Я не знаю ни одного способа чтения 64-битного FILETIME из VBS, тем более что VBS не обрабатывает 64-битные числа изначально. Если у вас есть FILETIME, вы можете проанализировать его с помощью SWbemDateTime. Вот пример.

Другие вопросы по тегам