首页 > 解决方案 > 在我的文件浏览器中重命名文件夹会导致 IOException

问题描述

该项目是一个备份程序。

我有两个浏览器以相同的形式并排(两个 TreeViews 和两个 ListViews),左边一个显示源文件,右边一个显示备份文件,但是当它们不浏览备份时,它们可以用作双文件浏览器. 在树视图中访问节点时,会将 FileSystemWatcher(不监视子目录)添加到该文件夹​​中。我可以重命名列表视图中的文件和文件夹并使用 Windows 资源管理器,更改都会反映在两者中,即使在树视图中选择了文件夹,重命名也会正常进行。一旦我选择要重命名的文件夹内的文件夹,然后选择文件夹外的文件夹,listview 和 Win Explorer 都不能再重命名该文件夹,它会产生 IOException。

ex.ToString 读取(dfgdotttd 只是我试图多次重命名文件夹):

System.IO.IOException:拒绝访问路径“D:\Visual Basic Projects\BackUp\BackUp_01\INIT\New folder\dfgdotttd”。在 System.IO.Directory.InternalMove(String sourceDirName, String destDirName, Boolean checkHost) 在 Microsoft.VisualBasic.FileIO.FileSystem.RenameDirectory(String directory, String newName) 在 Microsoft.VisualBasic.MyServices.FileSystemProxy.RenameDirectory(String directory, String newName) 在 BackUp.Ute.ReNameDir(String OldDir, String NewDirName, Boolean Notify)

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

当我在 Win Explorer 中尝试重命名时,Windows 对话框显示:

“使用中的文件夹” 由于文件夹或其中的文件已在另一个程序中打开,该操作无法完成 关闭文件夹或文件并重试。

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

将 FSW 添加到(FilesystemWatcher)列表中,该列表在 TreeViews 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)

添加 FSW'

        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

我会展示 OnChanged Sub 但它没有那么远

我想这没什么可继续的,但我正在从谷歌等公司自学,这有点像有时把我的头撞在墙上,但我有时间。也许这里有人可以发现一些明显的东西:)

标签: browserrenameioexceptionfilesystemwatcher

解决方案


推荐阅读