Преобразование меток времени NTFS в метки времени FAT - PullRequest
0 голосов
/ 11 февраля 2010

Я пишу приложение для передачи файлов, и мне нужно скопировать файлы с NTFS на диски FAT. Чтение из http://support.microsoft.com/kb/127830, Я понимаю, что время, такое как # 11/29/2004 7:31:06 PM, 250ms # должно быть переведено в # 11/29/2004 7:31:08 PM, 0ms # когда копирование на жесткий диск FAT. Однако в действительности время файла сокращается до # 11/29/2004 7:31:06 PM, 0ms #.

Я что-то здесь упускаю? Когда время усекается, а когда округляется?

Спасибо большое! CFP

Редактировать: Добавить пример кода:

IO.File.GetLastWriteTimeUtc(Source)

Моя функция NTFS-> FAT:

Function NTFSToFATTime(ByVal NTFSTime As Date) As Date
    Return (New Date(NTFSTime.Year, NTFSTime.Month, NTFSTime.Day, NTFSTime.Hour, NTFSTime.Minute, NTFSTime.Second).AddSeconds(If(NTFSTime.Millisecond = 0, NTFSTime.Second Mod 2, 2 - (NTFSTime.Second Mod 2))))
End Function

Ответы [ 2 ]

2 голосов
/ 11 февраля 2010

Техническая информация: в основном FAT использует 2 байта для хранения времени (часы / минуты / секунды) создания файла в записи каталога. Он использует младшие 4 бита этого поля для секунд, для которых допустимы значения 0-29, и они умножаются на 2, чтобы получить окончательное значение. Таким образом, по необходимости, секунды будут четным числом.

Странно, но я предполагаю, что документы либо неверны, либо не ссылаются на используемый вами API. Ваша временная метка только усекается. Не уверен, какой API вы используете для создания файла FAT (может быть полезно посмотреть документы для него).

1 голос
/ 20 февраля 2010

Фактически, проблема была связана с интерфейсом жесткого диска, который неправильно обрабатывал время файла (отсек хранения d-link), т.е. усечение, а не округление.

Таким образом, нет истинного способа избежать этой проблемы, кроме небольшого неряшливости при проверке времени.

Большое спасибо, CFP.

...