【问题标题】:Are windows file creation timestamps reliable?windows文件创建时间戳可靠吗?
【发布时间】:2008-11-03 01:03:19
【问题描述】:

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

【问题讨论】:

  • 您可能希望更具体地扩展您想要实现的目标

标签: windows file


【解决方案1】:

如果您有一个充满任意和随机命名文件的目录,并且“时间”是唯一因素,那么建立一个与时间戳匹配的文件名以消除使用工具查看它的需要可能更有意义。

2008_12_31_24_60_60_1000  

我建议使用平面文件系统。

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

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

或者更大的东西

2008/
2008/12_31/

等等等等等等。

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

【讨论】:

    【解决方案2】:

    “可靠”是什么意思?当你创建一个文件时,它会得到一个时间戳,这很有效。现在,该时间戳的分辨率不一定很高——我认为在 FAT16 上是 2 秒。在 FAT32 和 NTFS 上,它可能是 1 秒。因此,如果您以低于每秒一个的速度保存文件,那么您应该很好。请记住,用户可以任意更改时间戳值。如果您对此感到担心,则必须将时间戳嵌入到文件本身中(尽管在我看来这将是 ovekill)

    【讨论】:

      【解决方案3】:

      当然,如果机器的用户是管理员,他们可以将当前时间设置为他们想要的任何值,系统会很乐意为文件加上那个时间。

      所以这一切都取决于您要如何处理这些信息。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          如果系统时间因某种原因发生更改怎么办?看起来很方便,但也许其他一些版本号会更好。

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

          【讨论】:

            【解决方案6】:

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

            类似于GetFileInfoEx docs中的这条评论

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

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

            据说这与名为tunnelling的东西有关

            【讨论】:

              【解决方案7】:

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-08-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-01-20
                • 2010-09-29
                • 2014-02-05
                • 1970-01-01
                相关资源
                最近更新 更多