我正在制作一个重命名文件夹和文件的应用程序,它的概念是这样的,我有两个备份文件夹,它们具有相同的内容,比方说Backup1
和 Backup2
,如果我重命名 Backup1
中的子文件夹,则该子文件夹 IN Backup2
应该重命名。我正在使用 FileSystemWatcher
来监视正在重命名的文件
Sub FileLogs()
watchfolder = New System.IO.FileSystemWatcher()
Dim src As String = Label5.Text
watchfolder.Path = src
watchfolder.IncludeSubdirectories = True
watchfolder.NotifyFilter = IO.NotifyFilters.DirectoryName
watchfolder.NotifyFilter = watchfolder.NotifyFilter Or IO.NotifyFilters.FileName
AddHandler watchfolder.Renamed, AddressOf logrename
'Start monitoring for renames of folders and files
watchfolder.EnableRaisingEvents = True
End Sub
并将监控重命名的项目存储在 List(Of String)
Dim oldItemName As New List(Of String)
Dim newItemName As New List(Of String)
Private Sub logrename(ByVal source As Object, ByVal e As System.IO.RenamedEventArgs)
oldItemName.Add(e.OldName)
newItemName.Add(e.Name)
End Sub
这是重命名发生的地方。
Dim dest As String = Label6.Text
For i = 0 To Math.Min(oldItemName.Count - 1, newItemName.Count) - 1
Try
My.Computer.FileSystem.RenameDirectory(Path.Combine(dest, oldItemName(i)), newItemName(i))
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Next
此代码仅在 Backup2\
中有效,但如果我将 Backup1\Folder\SUB
中的文件夹重命名为 Backup2\Folder\SUB 中的文件夹
不能重命名。它抛出一个 ArgumentException
Argument 'newName' 必须是一个名称,而不是相对或绝对路径:'Folder\SUB1'。
参数名称:newName
我认为它所做的是将 Backup2
中的 SUB
重命名为 Folder\SUB
这就是它出错的原因,因为watchfolder.IncludeSubdirectories = True
受监控的子文件夹存储为 Folder\SUB
,这对路径来说很好。但是我该如何正确重命名呢?以及我如何递归执行并重命名多个项目?
最佳答案
For i = 0 To Math.Min(oldItemName.Count - 1, newItemName.Count) - 1
应该是吧
For i = 0 To Math.Min(oldItemName.Count - 1, newItemName.Count - 1)
关于vb.net - 递归重命名 VB.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690987/