1

スキャン デバイスから TIF ファイルを受け取るディレクトリを監視する FileSystemWatcher があります。

スキャン プロセスが完了したかどうかを確認してから、完全にスキャンされたファイルを処理する必要があります。そうしないと、プログラムが不完全なファイルを処理してしまいます。

私は次のようなものを持っています:

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 形式のドキュメントを読みました。属性 PageNumber が興味深いと思いましたが、それで問題が解決するかどうかわかりません

4

3 に答える 3

1

Image.FromFileメソッドを検討しましたか?

この関数がそれを開いて有効な tif ファイルを読み取ることができれば、問題ありません。

ヘッダーの問題は、通常、ヘッダーがファイルの先頭にあり、最初に書き込まれるため、ファイルの残りの部分がまだ完全に書き込まれていないことです。

ファイルの排他ロックを使用して、スキャナーがファイルの書き込みを終了したかどうかを確認できますが、それはスキャナー ソフトウェアの動作に依存します。つまり、書き込み時にファイルをロックしたままにするか、開く/書き込みブロック/閉じる/繰り返しますか? .

于 2011-11-17T02:05:31.640 に答える
0

ハンス・パッサントがコメントに答えたように、私が有用だと思った唯一の解決策は次のとおりです。

TIFFファイルに「スキャナーはまだ完了していません」というメタデータ項目は見つかりません。より優れたスキャナー、ヒューリスティック、またはWIAなどのより優れたスキャナーインターフェイスが必要になります。

于 2012-09-14T05:36:20.993 に答える
0

ファイルサイズが変化しているかどうかをテストできます。

FileInfo fi = new FileInfo(f);
long size = fi.Length;
Application.DoEvents();
System.Threading.Thread.Sleep(5000);
Application.DoEvents();
FileInfo nfi = new FileInfo(f);
long nsize = nfi.Length;
if (size == nsize)
{
    //Do function
}
于 2014-09-19T09:06:55.547 に答える