2010-02-11 3 views
0

Я пишу приложение для передачи файлов, и мне нужно скопировать файлы с 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 #.Преобразование временных меток NTFS в временные метки FAT

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

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

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

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 
+1

В связанных статьях говорится: «Временные метки файлов на дисках FAT округлены до ближайших двух секунд (четное число), когда файл записан на диск», что, по-видимому, является именно тем поведением, которое вы наблюдаете? –

+0

Можете ли вы показать код? – t0mm13b

+0

Фактически, часть, указывающая, что «Временные метки файлов на дисках FAT округлены до ближайших двух секунд (четное число), когда файл записывается на диск» означает, что файлы записываются непосредственно на диск, а не копируются с Привод NTFS к FAT. Он также говорит: «Когда файлы скопированы с дисков NTFS на диски FAT, должно произойти округление штампа времени файла, а штамп времени файла округляется до следующего даже второго». –

ответ

1

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

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

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

2

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

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

+0

Ummm ... Бен, эта ссылка уже в вопросе OP! ...: D – t0mm13b

+0

Ha! Справедливо. Редактирование для моего ответа блестящего понимания. –

+0

Хммм, странно, что в других случаях он работает, округляя значения. Я использую VB.Net ... Любое дальнейшее понимание? Спасибо! –