0

FileSystemWatcherを使用し、ファイルの作成時にある宛先から別の宛先にファイルを移動する単純なC#コンソールアプリケーションがあります。私のコードは次のようになります。

    public static void WatchForFiles()
    {
        FileSystemWatcher watcher = new FileSystemWatcher();
        //folder path is path to folder
        watcher.Path = folderPath;

        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
            | NotifyFilters.FileName | NotifyFilters.DirectoryName;

        //Add event handlers           
        watcher.Created += new FileSystemEventHandler(File_OnChanged);        

        //Begin watching
        watcher.EnableRaisingEvents = true;
    }


    public static void File_OnChanged(object sender, FileSystemEventArgs e)
    {
        //destiantion path is path to folder
        string destiantionFileFullPath = destianationPath + e.Name;
        if (!File.Exists(destiantionFileFullPath))
        {
            File.Move(e.FullPath, destiantionFileFullPath);
        }
    }

初めてファイルをコピーすると、正常に移動します。しかし、その後、または2つ以上のファイルをコピーすると、コンソールウィンドウが自動的に閉じられます。IAsyncResultを使用する必要があると思いますが、方法がわかりません。Tasksを試しましたが、役に立ちませんでした。最初にファイルをコピーしてから削除しても役に立ちませんでした。これには何が原因で、どうすればこれを防ぐことができますか?前もって感謝します

4

2 に答える 2

1

経験上、FileWatcherを使用して、ダンプされたファイルを監視し、(場合によっては)ファイルを移動することは、管理したいよりも厄介です。単純な理由は、アプリケーションがダウンしているときにファイルがディレクトリにダンプされた場合、FileWatcherはそれらをキャッチしないということです。定期的にポーリングするタイマーを使用して、ディレクトリにファイルがあるかどうかを確認し、それらを移動することをお勧めします。このアプローチを使用すると、アプリケーションがダウンしているときに(たとえばメンテナンスのために)新しいファイルがフォルダーにダンプされた場合、アプリが再起動されてタイマーがポーリングを開始するとすぐにそれらのファイルが移動されます

于 2012-06-26T11:16:57.847 に答える
0

2つのファイルをコピーしない:1つのファイルをコピーしている間、別のファイルが作成されますが、eventgsの発生は無効になっているため、イベントは通知されません。

のディレクトリをスキャンしてみてくださいFile_OnChanged。そうすれば、これを見つけることができます。

なぜ終了するのですか?例外が発生すると思います。おそらく、書き込みプロセスが書き込みを終了しておらず、すでにそのファイルにアクセスしています。これは許可されていない可能性があります。

于 2012-06-26T11:05:24.170 に答える