重复创建不同文件和时间的文件创建日期时间
作者:互联网
我编写了一项服务,用于监视扫描仪中文件的放置位置.除非该文件已经存在,否则扫描程序会丢弃所有具有完全相同文件名的文件(例如Test.tif),然后在末尾附加时间戳(例如Test_0809200915301900.tif).
因此,当我处理这些文件时,我在数据库条目上附加了一个“标签”以反映该特定文件,即文件名加上文件创建时间戳记(以滴答为单位).每个扫描仪最多每几秒钟可以进行一次扫描,因此精确到秒即可.
以下是生成此假定唯一标签的代码:
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的文件.这样可以确保仅处理唯一文件.
解决方法:
这是Windows的一项功能,称为File System Tunneling,是预期的行为.从本质上讲,这是一种适用于软件的操作系统,该软件可在用户编辑和保存文件时删除文件并写入新文件.用户期望编辑后的文件的文件创建时间与原始文件的创建时间相同,并且软件可能要求文件名的“短”版本在编辑前后保持相同,因此Windows会对其进行伪造.
有关更多详细信息,请参阅:The apocryphal history of file system tunnelling.
编辑:
我很惊讶Feaderne建议的FileSystemInfo.LastWriteTime无法正常工作.
您是否可以按原样保留File1.tif并使用FileSystemWatcher监视目录中唯一文件的创建,对新创建的文件进行模式匹配,然后使用命名方案复制它们?
标签:filesystems,timestamp,datetime,c 来源: https://codeday.me/bug/20191107/2002434.html