Browser 重命名“我的文件浏览器”中的文件夹会导致IOException

Browser 重命名“我的文件浏览器”中的文件夹会导致IOException,browser,rename,ioexception,filesystemwatcher,Browser,Rename,Ioexception,Filesystemwatcher,该项目是一个备份程序 我有两个相同格式的浏览器(两个TreeView和两个ListView),左侧显示源文件,右侧显示备份文件,但当它们不浏览备份时,可以用作双文件浏览器。 在树视图中访问节点时,会将FileSystemWatcher(不监视子目录)添加到该文件夹中。我可以在listview中重命名文件和文件夹,使用windows资源管理器,更改将反映在这两个文件夹中,即使在树视图中选择了文件夹,也可以很好地进行重命名。当我在要重命名的文件夹内选择一个文件夹,然后在文件夹外选择一个文件夹时,li

该项目是一个备份程序

我有两个相同格式的浏览器(两个TreeView和两个ListView),左侧显示源文件,右侧显示备份文件,但当它们不浏览备份时,可以用作双文件浏览器。 在树视图中访问节点时,会将FileSystemWatcher(不监视子目录)添加到该文件夹中。我可以在listview中重命名文件和文件夹,使用windows资源管理器,更改将反映在这两个文件夹中,即使在树视图中选择了文件夹,也可以很好地进行重命名。当我在要重命名的文件夹内选择一个文件夹,然后在文件夹外选择一个文件夹时,listview和Win Explorer都不能再重命名该文件夹,它会生成一个IOException

ex.ToString读取(dfgdotttd是我多次尝试重命名文件夹时得到的):

System.IO.IOException:对路径“D:\Visual Basic Project\BackUp\BackUp\u 01\INIT\New folder\dfgdotttd”的访问被拒绝。 位于System.IO.Directory.InternalMove(字符串sourceDirName、字符串destDirName、布尔checkHost) 位于Microsoft.VisualBasic.FileIO.FileSystem.RenameDirectory(字符串目录,字符串新名称) 位于Microsoft.VisualBasic.MyServices.FileSystemProxy.RenameDirectory(字符串目录,字符串新名称) 在BackUp.Ute.ReNameDir处(字符串OldDir、字符串NewDirName、布尔通知)

OldDir是文件夹的“路径和名称”,NewDirName只是“新名称”

在Win资源管理器中尝试重命名时,Windows对话框显示:

“正在使用的文件夹” 无法完成该操作,因为文件夹或其中的文件已在其他程序中打开 请关闭文件夹或文件,然后重试

我能修复它的唯一方法是关闭浏览器并重新打开它

将FSW添加到在TreeViews AfterSelect事件中启动的(FilesystemWatcher)列表中

TreeView AfterSelect:

If Not Visited_Nodes_A.Contains(HOSTNode.Name) Then 'Collection of visited nodes for TVA
   Visited_Nodes_A.Add(HOSTNode.Name)
   If Not Visited_Nodes_B.Contains(HOSTNode.Name) Then 'Collection of visited nodes for TVB
       AddWatcher(HOSTNode.Name) 'If folder was visited in other TreeView THEN a Watcher would already have been added.
   End If
End If 'Not Visited_Nodes_A.Contains(HOSTNode.Name)
添加FSWs的

        Private FileWatchers As New List(Of FileSystemWatcher)
Public Sub AddWatcher(WPath As String, Optional Subffolders As Boolean = False) 'Add new watcher to a newly visited folder
    Dim fsw As New FileSystemWatcher()
    fsw.Path = WPath
    fsw.IncludeSubdirectories = Subffolders
    AddHandler fsw.Changed, AddressOf OnChanged
    AddHandler fsw.Created, AddressOf OnChanged
    AddHandler fsw.Deleted, AddressOf OnChanged
    AddHandler fsw.Renamed, AddressOf OnRenamed : AddHandler fsw.Renamed, AddressOf OnChanged
    fsw.NotifyFilter = (NotifyFilters.FileName Or NotifyFilters.DirectoryName)
    fsw.EnableRaisingEvents = True
    FileWatchers.Add(fsw)
End Sub 'AddWatcher
我会给你看一次改变后的潜艇,但没那么远


我想这不算什么,但我在谷歌等网站上自学,有时有点像在墙上撞脑袋,但我有时间。也许这里有人可以发现一些明显的问题:)

您需要删除正在查看要重命名的目录子目录的FSW-它们是打开文件夹的实体。您需要删除正在查看要重命名的目录子目录的FSW-它们是实体打开文件夹。