我有一个FileSystemWatcher监视zip文件的文件夹,然后在添加到文件夹时执行文件内容的提取。当按预期方式将文件复制或移动到文件夹时,一切正常。 Chrome或IE浏览器将目标另存为或保存链接作为超链接将文件下载到文件夹,但OnCreated事件不会触发。相反,它以这种方式将zip文件保存到文件夹时触发OnDeleted。下载超链接可以是基于Web服务器,也可以是本地文件到pc,两者都不起作用。是否需要为此应用单独的通知过滤器?
protected override void OnLoad(EventArgs e)
{
Visible = false; // Hide form window.
ShowInTaskbar = false; // Remove from taskbar.
if (!Directory.Exists(@"c:\fwbuilder"))
{
Directory.CreateDirectory(@"c:\fwbuilder");
}
if (!Directory.Exists(@"c:\fwbuilder\romdata"))
{
Directory.CreateDirectory(@"c:\fwbuilder\romdata");
}
// Create a new FileSystemWatcher object.
FileSystemWatcher fsWatcher = new FileSystemWatcher();
//listBox.Items.Add("Started FileSystemWatcher Service…");
fsWatcher.Path = @"c:\fwbuilder";
// Set Filter.
fsWatcher.Filter = "*.zip";
// Monitor files and subdirectories.
fsWatcher.IncludeSubdirectories = false;
// Monitor all changes specified in the NotifyFilters.
fsWatcher.NotifyFilter = NotifyFilters.Attributes |
NotifyFilters.CreationTime |
NotifyFilters.DirectoryName |
NotifyFilters.FileName |
NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.Security |
NotifyFilters.Size;
fsWatcher.EnableRaisingEvents = true;
// Raise Event handlers.
fsWatcher.Changed += new FileSystemEventHandler(OnChanged);
fsWatcher.Created += new FileSystemEventHandler(OnCreated);
fsWatcher.Deleted += new FileSystemEventHandler(OnDeleted);
fsWatcher.Renamed += new RenamedEventHandler(OnRenamed);
fsWatcher.Error += new ErrorEventHandler(OnError);
base.OnLoad(e);
}
答案 0 :(得分:0)
如果没有看到文件更改的完整细节,很难确定磁盘上究竟发生了什么。
我建议您进行以下小型实验,以便更好地了解从浏览器下载文件并将其保存到程序正在观看的文件夹时会发生什么。
浏览器可能创建临时文件,并在下载结束时将其重命名为所需名称。如果确实如此,您可以开始观看重命名操作并在那里触发提取操作。
我猜你因为.zip过滤器错过了temp文件上的create事件。
试试这个,让我知道它是怎么回事。另外,发布实验结果(日志)。