【发布时间】:2011-11-16 16:20:31
【问题描述】:
我有一个 FileSystemWatcher 监视从扫描设备接收 TIF 文件的目录。
必须检查扫描过程是否完成,然后处理完全扫描的文件,否则我的程序将处理一个不完整的文件。
我有类似的东西:
private void OnFileCreated(...)
{
while(IsFileLocked(path))
Thread.Sleep(time);
// OK to read
}
这是正在发生的事情:
- Scanner creates the file
- FileSystemWatcher detects the file, but its in use
- Scanner reads the first page to the file
- Scanner releases the file
- My code leaves the while(IsFileLocked(path))
- My code reads the incomplete file (problem)
- Scanner adds more pages to the file
假设扫描仪正在扫描 100 页,那么当“可以读取”时,文件将不完整(还剩 99 页)。
因此,有必要知道文件是否完整。可能需要等待一段时间才能查看文件是否被修改,但这个时间跨度可能长达数小时,因为扫描仪可能会空闲扫描相同的 TIF。其他解决方案是检查 TIF 文件中的一些标志,表明该文件不完整(我已经寻找过这个但没有找到任何东西)。
编辑:在这里提问之前,我已经阅读了TIFF format documentation。我发现属性 PageNumber 很有趣,但不知道它是否能解决我的问题
【问题讨论】:
-
FileInUse函数有什么作用? -
您可以查询扫描仪以了解扫描完成的时间吗?
-
它验证是否有任何程序正在读取文件,我用这种方式来保持简单,但它的作用类似于:stackoverflow.com/questions/876473/… 这个方法更好的名称是 IsFileLocked
-
SpectralGhost - 抱歉,我不能...我什至不知道是哪个扫描仪创建了该文件。我正在寻找 TIF 格式本身的解决方案,我想知道是否某些 TIF 文件头可以为我提供此信息。或者更好的是,通常设备定义的文件属性以指示文件不完整
-
您不会在 TIFF 文件中找到显示“扫描仪尚未完成”的元数据项。您将需要更好的扫描仪或启发式或更好的扫描仪界面,例如 WIA。
标签: c# tiff filesystemwatcher scanning