Windows文件创建时间戳是否可靠?

时间:2008-11-03 01:03:20

标签: windows file

我有一个使用保存文件的程序。它需要加载最新的保存文件,但如果该文件不可用或已损坏,则返回到下一个最新的文件。我可以使用Windows文件创建时间戳来告诉它们何时被创建,或者这是不可靠的?我问,因为“改变”的时间戳似乎不可靠。如果必须的话,我可以在名称中嵌入创建时间/日期,但如果可能的话,使用文件系统日期会更容易。

7 个答案:

答案 0 :(得分:2)

如果您的目录中包含任意且随机命名的文件,并且“时间”是唯一的因素,那么建立与时间戳匹配的文件名可能更有意义,从而无需使用工具来查看它。

2008_12_31_24_60_60_1000  

这是我对flatfile系统的建议。

有时,如果你有很多文件,你可能想要对它们进行分组,即:

2008/
2008/12/
2008/12/31
2008/12/31/00-12/
2008/12/31/13-24/24_60_60_1000 

或更大的东西

2008/
2008/12_31/

等等等。

(此外,如果你没有嵌入时间,你的其他区别特征是什么,你不能有一个空文件名,创建单调递增序列更难?需要信息)

答案 1 :(得分:2)

“可靠”是什么意思?创建文件时,它会获得一个时间戳,并且可以正常工作。现在,该时间戳的分辨率不一定很高 - 在FAT16上我认为是2秒。在FAT32和NTFS上它可能是1秒。因此,如果您以每秒不到一个的速度保存文件,那么您应该很好。请记住,该用户可以任意更改时间戳值。如果你担心这一点,你必须将时间戳嵌入文件本身(虽然在我看来这将是过度的)

答案 2 :(得分:2)

当然,如果机器的用户是管理员,他们可以将当前时间设置为他们想要的任何时间,系统将很高兴地为这段时间的文件加时间戳。

所以这一切都取决于你要对信息做些什么。

答案 3 :(得分:1)

Windows时间戳采用UTC格式。因此,如果您的时区发生变化(即夏令时开始或结束时),时间戳将向前/向后移动一小时。除此之外,大约2秒的准确性,没有理由认为时间戳是无效的,并且它当然可以使用它们。但我认为这是一种不好的做法,当你可以简单地将时间戳放在名称中,或者甚至放在文件本身中。

答案 4 :(得分:1)

如果因某种原因改变了系统时间怎么办?这似乎很方便,但也许其他一些版本号会更好。

补充:类似问题,但有数据库,here

答案 5 :(得分:1)

我在删除和重新创建相同名称后的文件创建时间方面遇到了一些问题。

GetFileInfoEx docs

中的此评论类似的内容
  

重新创建文件后获取正确创建时间的问题

     

我尝试使用GetFileAttributesEx然后获取ftCreationTime字段   生成的WIN32_FILE_ATTRIBUTE_DATA结构。它工作得很好   起初,但在我删除文件并再次重新创建之后,它一直在给予   在重新启动过程之前,我原来已经不正确了   再次。 FindFirstFile API也会出现同样的问题。我用   Window 2003。

据说这与名为tunnelling

的内容有关

答案 6 :(得分:0)

当您想重命名文件时尝试使用

Path.Combine(ArchivedPath, currentDate + " " + fileInfo.Name))