1

我正在编写一个文件传输应用程序,我需要将文件从 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#。

我在这里错过了什么吗?时间什么时候被截断,什么时候被四舍五入?

编辑:添加代码示例:

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
4

2 回答 2

3

技术背景:基本上 FAT 使用 2 个字节来存储在目录条目中创建文件的时间(小时/分钟/秒)。它使用该字段的低 4 位来表示秒,其中 0-29 的值是有效的,并乘以 2 得到最终值。因此,秒数必然是偶数。

很奇怪,但我的猜测是文档要么错误,要么没有引用您正在使用的 API。您的时间戳刚刚被截断。不确定您使用哪个 API 来创建 FAT 文件(可能有助于查看它的文档)。

于 2010-02-11T20:30:24.563 回答
2

事实上,问题与以错误方式处理文件时间的硬盘接口有关(d-link 存储托架),即。截断而不是四舍五入。

因此,没有真正的方法可以避免这个问题,只能允许在时间检查中稍有马虎。

于 2010-02-20T13:13:24.463 回答