代码之家  ›  专栏  ›  技术社区  ›  Kelsey

文件创建日期时间为不同的文件和时间复制

  •  3
  • Kelsey  · 技术社区  · 15 年前

    我已经编写了一个服务,它监视来自扫描仪的文件的文件放置位置。扫描器会删除文件名完全相同的所有文件(如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秒后另一次扫描,等等),会得到完全相同的文件创建时间戳。

    如。

    1. 文件位于:test1.tif
    2. 提取并与标签一起存储 测试1.tif_
    3. 删除test1.tif。
    4. 文件:test1.tif(5秒后)
    5. 由于生成的标记与 测试1.tif_

    这怎么可能?滴答声是相同的。我检查了创建时间对象,它是相同的,即使我物理上看到它在第一个对象5秒后创建。

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

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

    2 回复  |  直到 15 年前
        1
  •  4
  •   Peter Tate    15 年前

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

    有关详细信息,请参阅: The apocryphal history of file system tunnelling 了解更多详细信息。

    编辑: 我很惊讶 FileSystemInfo.LastWriteTime 正如费德恩建议的那样,没有起作用。 你能离开吗? File1.tif 按原样并使用 FileSystemWatcher ,模式匹配新创建的文件,并使用命名方案复制它们?

        2
  •  0
  •   Fedearne    15 年前

    LastWriteTime 给你想要的时间戳?