【问题标题】:Recursive renaming VB.NET递归重命名 VB.NET
【发布时间】:2016-02-29 02:26:50
【问题描述】:

我正在制作一个重命名文件夹和文件的应用程序,它的概念是这样的,我有两个备份文件夹,它们具有相同的内容,比如说Backup1Backup2,如果我重命名 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' must be a name, and not a relative or absolute path: 'Folder\SUB1'. Parameter name: newName

我认为它的作用是将Backup2 中的SUB 重命名为Folder\SUB,这就是它出现错误的原因,因为watchfolder.IncludeSubdirectories = True 受监控的子文件夹存储为Folder\SUB,这很好,因为的路径。但是我如何正确重命名它?以及如何递归执行并重命名多个项目?

【问题讨论】:

标签: vb.net recursion filesystemwatcher


【解决方案1】:
For i = 0 To Math.Min(oldItemName.Count - 1, newItemName.Count) - 1

应该是

For i = 0 To Math.Min(oldItemName.Count - 1, newItemName.Count - 1)

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 2020-11-23
    • 2011-01-11
    • 2018-11-26
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多