【问题标题】:Delphi overwrite file and wrong modified date timeDelphi覆盖文件和错误的修改日期时间
【发布时间】:2013-01-07 09:46:44
【问题描述】:

我想获取一个文件上次修改在 Delphi 中的时间。

通常像 FileAge() 这样的东西可以解决问题,唯一的问题是:如果我 overwrite *File A* with File B使用CopyFile,文件 A 的修改日期不会按照当前覆盖时间更新(?)

我明白了:CopyFile 也复制文件属性,但我确实需要获取修改日期,在文件被覆盖时起作用。

有这样的功能吗?我的整个应用程序依赖于修改时间来决定我是否应该继续处理文件!


编辑 澄清一下:我只是在监控文件。修改它们的不是我的应用程序。

【问题讨论】:

  • 不要使用CopyFile,删除文件A,重新创建文件B。
  • 我会使用 Windows Shell 方式和 SHFileOperation
  • 我不能,我只是在监视文件。不是我在修改它们,但我仍然需要跟踪更改:(
  • 覆盖文件的创建时间返回什么?
  • 您的问题编辑与最初的问题相反。所以你只是在监控文件,一旦检测到文件更改,你想更改文件的修改日期?

标签: delphi delphi-xe2 last-modified filetime


【解决方案1】:

CopyFile 的文档说:

现有文件的文件属性被复制到新文件中。

这意味着您不能基于文件的最后修改属性或文件的任何属性来使用您的程序。确实有各种方法可以改变文件的最后修改属性。它实际上可以在时间上倒退。

我建议您使用ReadDirectoryChangesW 来跟踪修改。这将允许您在文件被修改时接收通知。您可以基于ReadDirectoryChangesW API 以基于事件的方式编写程序。

如果您不能使用ReadDirectoryChangesW 和文件属性,那么您将不得不根据文件的内容做出决定。

【讨论】:

  • 是的,我很清楚这一点,我在我的问题中特别提到了它。我也确实使用ReadDirectoryChangesW(很好的捕获),但这不是scale:如果用户正在复制(或覆盖)一个大文件夹(1000s 个文件),捕获的唯一方法所有更改都是针对scan 文件夹本身,而不是一一处理文件。这就是为什么我以前/现在依靠文件修改来捕捉发生大变化时的变化。
  • 覆盖包含 1000 个文件的文件夹并不是极端/不寻常的情况。我必须处理这个!
  • 我不明白你说ReadDirectoryChangesW 无法扩展是什么意思。如果您宁愿继续使用 last modified 属性,正如您在该评论中所指出的那样,那么我真的看不出问题的重点。
  • 根据我的测试,ReadDirectoryChangesW 不会捕捉到每一个变化如果用户正在覆盖包含 1000 多个文件的大文件夹,这就是我所说的缩放。
  • 当然不,我不想继续使用最后修改的属性,因为显然它根本不可靠,但我确实想依赖可以跟踪的东西(相对)大的变化,因此我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 2019-02-11
  • 2016-06-12
  • 1970-01-01
  • 2013-02-05
  • 2021-12-13
  • 2020-10-21
相关资源
最近更新 更多