对于我的项目我需要在硬盘上观看文件夹并对任何文件或文件夹做出反应,这些文件或文件夹可能会在此文件夹或其任何子文件夹中创建,更改,重命名或删除。
为此,我创建了一个FileSystemWatcher
,如下所示:
Dim watcher As IO.FileSystemWatcher
watcher = New IO.FileSystemWatcher(<path to folder to watch>)
watcher.NotifyFilter = IO.NotifyFilters.FileName Or
IO.NotifyFilters.LastWrite Or
IO.NotifyFilters.DirectoryName Or
IO.NotifyFilters.Size
watcher.IncludeSubdirectories = True
AddHandler watcher.Created, AddressOf OnCreated
AddHandler watcher.Changed, AddressOf OnChanged
AddHandler watcher.Deleted, AddressOf OnDeleted
AddHandler watcher.Renamed, AddressOf OnRenamed
AddHandler watcher.Error, AddressOf Start.OnError
watcher.EnableRaisingEvents = True
除了为单个文件更改获取多个更改事件(我知道为什么我会获得多个事件以及如何解决此问题),我有一个主要问题。
如果我在监视文件夹中的任何位置删除文件,我会收到此文件的Deleted
事件,我可以对此做出反应。
但是如果我删除了我的监视文件夹中的非空子文件夹,我只会获得子文件夹的Deleted
事件,而不是该子文件夹中的文件。并且因为子文件夹和里面的文件已被删除,我自己无法查看硬盘上找出要删除的文件来处理它们。
您是否有任何想法如何通知子文件夹中已删除的文件?
感谢您的帮助。
编辑:
我做了一些测试。当我将监视文件夹中的子文件夹从一个位置移动到另一个文件夹时,我只获得该文件夹的Deleted
和Created
,而不是包含的文件。但在这种情况下,我至少可以直接在硬盘上查找已移动的文件。删除子文件夹时无法做到这一点。