我有一个FileSystemWatcher监视从扫描设备接收TIF文件的目录。检查TIFF文件扫描是否完成
有必要检查扫描过程是否完成,然后处理完全扫描的文件,否则,我的程序将处理不完整的文件。
我有类似:
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页,那么,当 “OK读”,该文件将不完整(剩99页)。
所以,它有必要知道文件是否完整。也许等待一段时间以查看文件是否被修改,但是这段时间可能长达数小时,因为扫描仪可以空闲扫描相同的TIF。其他解决方案将检查TIF文件中的一些标志,指示该文件不完整(我已经查找过但没有发现任何内容)。
编辑:在问这里之前,我已经读了TIFF format documentation。我发现属性PageNumber有趣,但不知道它是否会解决我的问题
什么的'FileInUse'功能吗? – vlad
您可以查询扫描仪了解扫描完成时间吗? – UnhandledExcepSean
它验证如果任何程序正在读取文件,我把这种方式来保持它简单,但它做类似于:http://stackoverflow.com/questions/876473/is-there-a-way-to-check如果一个文件正在使用 这个方法的一个更好的名字是IsFileLocked –