2016-02-29 89 views
3

我正在做一个重命名文件夹和文件,它的概念是这样的应用程序,我有两个备份文件夹和他们有相同的内容,比方说Backup1Backup2,如果我重新命名子文件夹Backup1该子文件夹INBackup2应重命名。我使用的是FileSystemWatcher监视正在更名递归重命名VB.NET

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文件夹不能重命名。它抛出一个ArgumentExceptionArgument 'newName' must be a name, and not a relative or absolute path: 'Folder\SUB1'. Parameter name: newName

什么,我认为它是它被重命名在Backup2SUBFolder\SUB这是因为watchfolder.IncludeSubdirectories = True的监测子文件夹中存储为Folder\SUB这是因为路径的好,为什么它有一个错误。但是,我如何正确地重命名它?以及如何递归执行,并且多个项目被重命名?

+0

看看在Io.Path方法(https://msdn.microsoft.com/en-us/library/system.io.path%28v = vs.110%29.aspx?F = 255&MSPPError = -2147217396) – dbasnett

回答

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

如果是这样

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