我有一个 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 格式文档。我发现属性 PageNumber 很有趣,但不知道它是否能解决我的问题