第一次使用FileSystemWatcher监视文件夹失败

时间:2012-07-30 14:10:58

标签: c# file-io windows-services filesystemwatcher

我每天都会多次收到来自不同用户的xml文件。这些是FTP到我的驱动器上的文件夹,比如D:\ batch。今天我用一个Scheduled Task检查这些文件,它启动一个ASP.NET页面并处理找到的文件并回答上传器并结束。此任务每15分钟运行一次,但上传者希望答案更快,所以我试图完成此任务。我创建了一个监视文件夹的Windows服务,当创建文件时,它会处理它。

我已经遵循了几个不同的指南,但特别是这一个http://www.codeproject.com/Articles/32591/Creating-a-Windows-Service-for-Watching-System-Dir

使用第一个文件,但每次添加第二个文件时,它都会崩溃:

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);
    }

捕获异常只会离开文件,但当然会使服务保持运行。

1 个答案:

答案 0 :(得分:0)

更改观察者以找到“_finish.txt”文件,用户在上传真实文件后发送

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

然后用“”替换_finish,我得到了保证完成上传的真实文件......