【问题标题】:File create datetime getting duplicated for different files and times文件创建日期时间为不同的文件和时间重复
【发布时间】:2010-12-13 23:27:22
【问题描述】:

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

因此,当我处理这些文件时,我会在 db 条目上附加一个“标签”,以反映这个特定的文件,即文件名加上文件创建时间戳(以刻度为单位)。每个扫描仪最多可以每隔几秒产生 1 次扫描,因此精确到秒就足够了。

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

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 的文件。这样可以确保只处理唯一的文件。

【问题讨论】:

  • 文件从何而来,您在测试期间是否删除了同一个文件?
  • 正在发生的事情与 Peter Tate 所说的差不多。不过,我正在寻找解决此问题的方法。

标签: c# datetime filesystems timestamp


【解决方案1】:

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

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

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

【讨论】:

  • 那么有什么办法可以解决这个问题吗?有什么方法可以实际计算出文件在目录中的确切时间?
【解决方案2】:

LastWriteTime 会给你你想要的时间戳吗?

【讨论】:

  • 不更改它以使用 LastWriteTime 会产生完全相同的结果。
猜你喜欢
  • 2011-07-11
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
相关资源
最近更新 更多