2017-04-09 7 views
1

私は定期的にディレクトリ内のビデオファイルをループするNode.jsプログラムを持っています。ファイルが追加または削除されると、プログラムはこの変更を反映するようにデータベースを更新します。ファイルが追加されると、FFmpegがサムネイルの生成に使用されます。ファイルがコピーされています

現在、ディレクトリにコピーされているファイルに対してFFmpegを実行しようとすると問題が発生します。ファイルが完全ではないので、FFmpegはサムネイルを生成できません。ファイルがいつコピーされているかを知っていれば、それを無視することができ、次にディレクトリがスキャンされたときにファイルが選択されます。

ファイルが現在コピーされているかどうか、または現在コピーしているファイルを無視してディレクトリをループする方法を教えてください。

+0

「ファイルがコピーされた場合、**完全で正しい**」と考えましたか?それをどうやって解決しようとしていますか?ファイル転送プロセスを制御できますか? –

+0

@AndrewHenleコピーは、ファイルをディレクトリにコピーまたはドラッグするユーザが行います。うまくいけば、OSがファイルを正常にコピーすることを願っています。ファイルが何らかの形で壊れていると、プログラムはエラーで終了します。 – user2248702

答えて

0

ファイルを見つけたら、現在のサイズをバイトで取得し、1秒後にファイルをチェックし、ファイルサイズが同じであるかどうかを確認します。そうでない場合は、ファイルが現在書き込まれていることを意味します。

+1

これは大抵の場合うまくいくと思いますが、ファイル転送には数秒かかることがありますが、時には偽陽性の原因となる数秒間フリーズすることがあります。 – user2248702

+0

node.jsを使用しているので、同時に複数のファイルでこれを行うことができます。チェックの間隔を例えば1秒に増やすことができます。 10秒、またはチェックの量を増やします。私はこれを行う唯一の方法だと考えています。あなたが必要とすることを行うOSの機能を知らないでください。 –

1

次の2つのプロセス、ファイルを書き込み1と書かれたファイルを操作するものを持っていると仮定:コピーが完了すると

  1. は一時的なファイル名に(を/ tmp /ファイル名)
  2. をあなたのファイルを作成し、ターゲットディレクトリにすぐにリンクしてください。

この方法を使用すると、サムネイルプロセスでターゲットディレクトリの変更が監視され、完全なファイルのみが含まれることが保証されます。

fs.watchを参照すると、ディレクトリの変更を監視することができます。

関連する問題