browser - 在我的文件浏览器中重命名文件夹会导致 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 但它没有那么远
我想这没什么可继续的,但我正在从谷歌等公司自学,这有点像有时把我的头撞在墙上,但我有时间。也许这里有人可以发现一些明显的东西:)
解决方案
推荐阅读
- python - 当列类似于“Jan-18”时,如何将熊猫列转换为日期?
- node.js - 一个应用,2个网址,怎么做(NodeJs)
- c# - System.Data.SqlClient.SqlException:用户“登录失败”
- amazon-web-services - AWS ECS 任务运行状况检查始终失败
- python - 在 Python 中展开一列
- ruby-on-rails - 在块内渲染 HTML - Ruby on Rails
- airflow - 气流:每天多次安排任务
- python - Ulam Spiral(对角线数)编写程序python
- php - IAM 角色名称在 Yii 1 中被视为类
- sql - 如何加入原生 SQL 查询和学说