0

ファイル ウォッチャーを使用して、6-csv ファイルを含む新しい着信フォルダーのフォルダーを監視していますが、ファイル ウォッチャーは、新しいフォルダーが完全にコピーされる前に発生したイベントを作成しました。

wacher_created メソッドのコードは次のとおりです。

manifest_watcher.Created += new FileSystemEventHandler(manifest_watcher_Created);
manifest_watcher.EnableRaisingEvents = true;

public void manifest_watcher_Created(object sender, FileSystemEventArgs e)
{
    foreach (string file in Directory.GetFiles(e.FullPath, "*.csv"))
    {
        FileInfo subFileInfo = new FileInfo(file);
        logs.writeLog("FileInfo" + subFileInfo.FullName+"Name:"+subFileInfo.Name);
    }
}

受信フォルダーにはログの上に6つのファイルが書き込まれていましたが、残りは見過ごされたままでした。スレッドを使用せずにアクションが実行される前に、コピー/フォルダーの作成が完了するまでwacherを待機させたい. これを達成する方法は?

4

2 に答える 2

1

タイマーを作成し、ループ内で条件 (6 つのファイルが書き込まれる) を待ち、その条件が満たされない場合は短時間スリープすることができます ...

于 2013-11-13T06:32:19.240 に答える
1

ドキュメントを読むと、定義されたフォルダーでファイルが作成、変更、または削除されたときに OnCreated イベントが発生し、変更されたe.FullPathファイルの完全なパスが返されます。
これは、フォルダー内で作成、変更、または削除されたすべてのファイルに対して、イベントが発生することを意味します。
コードは少し異なり、すべてのファイルが宛先フォルダーに書き込まれるのを待つ必要はありません。

    public void manifest_watcher_Created(object sender, FileSystemEventArgs e)
    {
        WatcherChangeTypes wct = e.ChangeType;
        if (wct == WatcherChangeTypes.Created)
        {               
            logs.writeLog("FileInfo" + e.FullPath + "Name:" + e.Name);
        }
    }

フィルタを追加したい場合はCSV file、ログを書き込む前に作成されたファイルの拡張子を確認することで簡単に追加できます。

于 2013-11-13T06:39:45.097 に答える