2

私は現在、Windowsサービスでセキュリティカメラからデータをコピーする作業を行っています。データはコンピューターのGoogleドライブディレクトリに書き込まれ、すぐにアップロードされます。付属の再生ソフトウェアで作成後すぐにファイルにアクセスできるので、可能であればデータストリームをすぐにコピーして、録画が中断された場合でもビデオを作成したいと思います(ファイルは10分のタイムブロックです)。

現在、ディレクトリを監視できるサービスを作成していますが、これらのファイルを監視するための最良の方法を判断するのに苦労しています。10分間継続して変更されるため、変更されたイベントが多数発生します。最初の作成をキャプチャして、データを2番目のファイルにストリーミングし始める方法があるのではないかと期待していました。ここでの私の懸念は、レコーディングストリームをオーバーランしないようにする必要があるということです。

これが不可能または比較的単純な場合は、最後の書き込み時間のロジックを使用して、ファイルが書き込まれなくなったことを検出する必要がありますが、これを行うための最良の方法についての提案を探していますかもしれません。私はここで提案された解決策を知っていますが、それらが私が扱っている状況に当てはまるかどうかはわかりません。サブディレクトリ内には多数のファイルがあるため、イベントをトリガーしなくなったファイルを追跡しようとすると、非常に面倒になる可能性があります。これらの方法のいずれかを行う方法について誰かが何か提案がありますか?

4

3 に答える 3

1

うーん...タイマーを使ってみてください...この方法で、起動するタイミングを制限できます

private Boolean TimeToCheck=false;
public static void Run()
{   Timer timer=new Timer(2000); //2 seconds
    FileSystemWatcher fileWatch=new FileSystemWatcher();
    fileWatch.Path="DirToWatch";
    fileWatch.Filter="fileToWatch";
    fileWatch.Changed += new FileSystemEventHandler(OnChanged);
    fileWatch.Created += new FileSystemEventHandler(OnChanged);
    fileWatch.Deleted += new FileSystemEventHandler(OnChanged);
    //If you want rename, you could use the rename event as well  fileWatch.Renamed += new RenamedEventHandler(OnRenamed);
    timer.Elapsed += new ElapsedEventHandler(timer_done);
    watcher.EnableRaisingEvents = true;
    timer.Enabled = true; // Enable it
}

private static void OnChanged(object source, FileSystemEventArgs e)
{
    if(TimeToCheck)
    {
        TimeToCheck=false;
        timer.Enabled = false; // Enable it
        //move the files
        timer.Enabled = true; // Enable it
    }

}
private static void OnRenamed(object source, RenamedEventArgs e)
{
    if(TimeToCheck)
    {
        TimeToCheck=false;
        timer.Enabled = false; // Enable it
        //move the files
        timer.Enabled = true; // Enable it
    }
}
private static void timer_done(object sender, ElapsedEventArgs e)
{
    TimeToCheck=true;
}
于 2012-05-22T17:08:00.737 に答える
0

あなたはこれを試みることができますが、正直なところ、これはハックのように思えます.Windowsがあなたがやろうとしていることを実行するためのサポートされている方法を持っているかどうかは懐疑的です. 基本的に、書き込みストリームをリッスンしようとしています。

現在取り組んでいるソリューションはブラック ボックスのように聞こえるため、ストリームに直接アクセスすることはおそらく選択肢ではありません。ただし、別のアプローチがあります。Windowsでアプリを使用して仮想ドライブを作成する方法を検討します。こうすることで、レコーディング アプリケーションで仮想ドライブ パスに書き込むことができ、ストリームを好きなように処理できるようになります。これには、同時に 2 つの別々の場所に書き込むことが含まれます。たとえば、Googleドライブとある種のローカルストレージの両方。

開始する必要がある仮想ドライブの作成方法に関する StackOverflow の質問を次に示します。C#: コンピューターで仮想ドライブを作成する

于 2012-05-22T16:46:40.027 に答える
0

FileSystemWatcherオブジェクトを見ましたか? 私が質問を正しく理解しているなら、それはあなたが使いたいと思うかもしれません....このセキュリティファイルを特定のディレクトリに置く場合、file.copyを使用して更新されたセキュリティログをGoogle ドライブ フォルダ...

于 2012-05-22T16:43:03.383 に答える