【发布时间】: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 秒后另一个,等等),但得到的是准确的相同的文件创建时间戳。
例如。
- 文件位于:Test1.tif
- 使用标签
Test1.tif_633931295923017954提取和存储 - Test1.tif 已删除。
- 文件位于:Test1.tif(5 秒后)
- 由于生成的标签与
Test1.tif_633931295923017954重复,因此无法存储
这怎么可能?刻度是相同的。我检查了创建时间对象,尽管我亲眼看到它在第一个对象后 5 秒创建,但它也是相同的。
编辑: 谁能推荐一个解决方案来确保我正在处理一个独特的文件?我认为文件名+创建时间戳应该是一个足够好的检查,但显然不是。我无法关闭 Windows 正在执行的“隧道”功能。
编辑:我最终让进程重命名每个文件并附加一个 guid。然后处理文件的进程只查找带有 guid 的文件。这样可以确保只处理唯一的文件。
【问题讨论】:
-
文件从何而来,您在测试期间是否删除了同一个文件?
-
正在发生的事情与 Peter Tate 所说的差不多。不过,我正在寻找解决此问题的方法。
标签: c# datetime filesystems timestamp