gpt4 book ai didi

c# - 文件创建日期时间为不同的文件和时间重复

转载 作者:行者123 更新时间:2023-11-30 15:49:20 24 4
gpt4 key购买 nike

我编写了一项服务,用于监视来自扫描仪的文件的文件放置位置。扫描器会丢弃具有完全相同文件名(例如 Test.tif)的所有文件,除非该文件已经存在,然后它会在末尾附加一个时间戳(例如 Test_0809200915301900.tif)。

因此,当我处理这些文件时,我将“标签”附加到数据库条目以反射(reflect)此特定文件,即文件名加上文件创建时间戳(以滴答为单位)。每个扫描仪最多只能每隔几秒进行一次扫描,因此精确到秒就足够了。

下面是生成这个所谓的唯一标签的代码:

FileInfo fileInfo = new FileInfo(filePath);
string tag = string.Format("{0}_{1}", filename,
fileInfo.CreationTimeUtc.Ticks.ToString());

生成的标签类似于:Test1.tif_633931295923017954

出于某种原因,尽管在 20 秒的过程中(例如,1 次扫描,然后 5 秒后进行另一次扫描,然后 5 秒后进行另一次,等等)从同一台扫描仪进行大量扫描时,它们得到了准确的结果相同的文件创建时间戳。

例如。

  1. 文件在:Test1.tif
  2. 使用标签 Test1.tif_633931295923017954 提取并存储
  3. 删除 Test1.tif。
  4. 文件:Test1.tif(5 秒后)
  5. 因为生成的标签与 Test1.tif_633931295923017954 重复,所以无法存储

这怎么可能?滴答声是相同的。我检查了创建时间对象,它也是相同的,尽管我实际看到它是在第一个对象之后 5 秒创建的。

编辑:谁能推荐一种解决方案来确保我处理的是唯一文件?我认为文件名 + 创建时间戳应该是一个足够好的检查,但显然不是。我无法关闭 Windows 正在执行的“隧道”功能。

编辑:我最终让流程重命名每个文件并附加一个 guid。然后处理文件的进程查找仅附加了 guid 的文件。这确保只处理唯一的文件。

最佳答案

这是 Windows 的一项功能,称为 File System Tunneling , 并且是预期的行为。从本质上讲,这是一个操作系统,用于在用户编辑和保存文件时删除文件并写入新文件的软件。用户希望编辑文件的文件创建时间与原始文件相同,并且软件可能要求“短”版本的文件名在编辑前后保持相同,以便 Windows 伪造它。

更多详情请见:The apocryphal history of file system tunnelling了解更多详情。

编辑:我很惊讶 Feaderne 建议的 FileSystemInfo.LastWriteTime 不起作用。您能否保持 File1.tif 不变,并使用 FileSystemWatcher 观察目录中唯一文件的创建,模式匹配新创建的文件,然后使用您的复制它们命名方案?

关于c# - 文件创建日期时间为不同的文件和时间重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com