将NTFS时间戳转换为FAT时间戳

时间:2010-02-11 20:02:57

标签: windows io timestamp filetime

我正在编写文件传输应用程序,我需要将文件从NTFS复制到FAT驱动器。从http://support.microsoft.com/kb/127830读到,我知道像#11/29/2004 7:31:06 PM,250ms#这样的时间应该被翻译成#11/29/2004 7:31:08 PM,0ms#when复制到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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

因此没有真正的方法可以解决这个问题,但是要及时检查一下。

非常感谢, CFP。