0

1 日に何度も、さまざまなユーザーから xml ファイルを受け取ります。これらは、D:\batch など、私のドライブのフォルダーに FTP 送信されます。今日のように、ASP.NET ページを開始し、見つかったファイルを処理し、アップローダーに応答して終了するスケジュールされたタスクでこれらのファイルをチェックします。このタスクは 15 分ごとに実行されますが、アップローダーはより迅速に回答を求めているため、これを達成しようとしています。フォルダーを監視する Windows サービスを作成しました。ファイルが作成されると、それが処理されます。

私はいくつかの異なるガイドに従いましたが、特にこれはhttp://www.codeproject.com/Articles/32591/Creating-a-Windows-Service-for-Watching-System-Dirです

最初のファイルでは機能しますが、2 番目のファイルが追加されるたびにクラッシュします。

Exception Info: System.IO.IOException
Stack:
   at System.IO.__Error.WinIOError(Int32, System.String)
   at System.IO.File.InternalCopy(System.String, System.String, Boolean, Boolean)
   at System.IO.File.Copy(System.String, System.String)
   at FileMonitor.FilKigger.Watcher_Created(System.Object, System.IO.FileSystemEventArgs)
   at System.IO.FileSystemWatcher.OnCreated(System.IO.FileSystemEventArgs)
   at System.IO.FileSystemWatcher.NotifyFileSystemEventArgs(Int32, System.String)
   at System.IO.FileSystemWatcher.CompletionStatusChanged(UInt32, UInt32,     System.Threading.NativeOverlapped*)
   at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)

これはどうしてですか?

いくつかのコード:

protected override void OnStart(string[] args)
    {
        FileSystemWatcher Watcher = new FileSystemWatcher();
        Watcher.Path = "D:\\FTP\\Batch\\";
        Watcher.IncludeSubdirectories = true;
        Watcher.Created += new FileSystemEventHandler(Watcher_Created);
        Watcher.Deleted += new FileSystemEventHandler(Watcher_Deleted);
        Watcher.EnableRaisingEvents = true;
    }

ここでは、ファイルを新しいフォルダーにコピーするコードのみを示します。

void Watcher_Created(object sender, FileSystemEventArgs e)
    {
        File.Copy(e.FullPath, "D:\\newFolder\\" + e.Name);
        Lg.WriteEntry("File moved", EventLogEntryType.Information);
    }

例外をキャッチすると、ファイルはそのまま残りますが、もちろんサービスは実行され続けます。

4

1 に答える 1

0

「_finish.txt」ファイルを検索するようにウォッチャーを変更しました。これは、実際のファイルがアップロードされた後にユーザーが送信するファイルです。

Watcher = new FileSystemWatcher(ftpFolder, "*_finish.txt");

次に、_finishを ""に置き換えると、アップロードが完了することが保証されている実際のファイルが得られます...

于 2012-07-31T10:38:01.383 に答える