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);
}
例外をキャッチすると、ファイルはそのまま残りますが、もちろんサービスは実行され続けます。