我已经编写了一个服务,它监视来自扫描仪的文件的文件放置位置。扫描器会删除文件名完全相同的所有文件(如test.tif),除非该文件已经存在,然后它会在末尾附加一个时间戳(如test_.tif)。
所以当我处理这些文件时,我在db条目上附加一个“标记”,以反映这个特定的文件,即文件名加上文件创建时间戳(以滴答为单位)。每台扫描仪最多每几秒钟可产生一次扫描,因此对第二台扫描仪的精度就足够了。
下面是生成此假定唯一标记的代码:
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
-
提取并与标签一起存储
测试1.tif_
-
删除test1.tif。
-
文件:test1.tif(5秒后)
-
由于生成的标记与
测试1.tif_
这怎么可能?滴答声是相同的。我检查了创建时间对象,它是相同的,即使我物理上看到它在第一个对象5秒后创建。
编辑:
有人能推荐一个解决方案来确保我处理的是一个唯一的文件吗?我认为文件名+创建时间戳应该是一个足够好的检查,但显然不是。我无法关闭Windows正在执行的“隧道”功能。
编辑:
最后我让进程重命名每个文件并附加一个guid。然后处理这些文件的进程只查找附加了guid的文件。这确保只处理唯一的文件。