2016-02-29 88 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)