ディレクトリを数秒ごとにポーリングして、新しい入力ファイルのディレクトリを監視するアプリケーションを作成しています。多くの場合、新しいファイルは数メガバイトになるため、入力ディレクトリに完全に到着するまでに時間がかかります (例: リモート共有からのコピー時)。
ファイルが現在コピー中であるかどうかを検出する簡単な方法はありますか? どの方法もプラットフォームやファイルシステムにとらわれないことが理想ですが、それができない場合は、プラットフォームごとに特定の戦略が必要になる場合があります。
数秒間隔で 2 つのディレクトリ リストを取得してファイル サイズを比較することを既に検討しましたが、これは時間と信頼性のトレードオフになり、他に方法がない場合を除き、上司は満足していません。
背景として、アプリケーションは一連の Matlab M ファイルとして作成されているため、JRE/CLR のトリックはありません...
編集:ファイルは、ネットワーク ドライブまたはローカル ファイルシステムの別の場所から直接移動/コピー操作によって直接入力に到着しています。このコピー操作は、おそらく別のアプリケーションではなく、人間のユーザーによって開始されます。
その結果、制御ファイルを追加したり、中間ステージング領域を使用したりする責任をファイルプロバイダーに負わせることはかなり困難です...
結論:これを行う簡単な方法はないように思われるので、ベルトとブレースのアプローチに落ち着きました。次の場合、ファイルは処理の準備ができています。
- そのサイズは一定期間変化しません。
- ファイルを読み取り専用モードで開くことができます (一部のコピー プロセスではファイルがロックされます)。
回答をくださった皆さん、ありがとうございました。