我正在做一個重命名文件夾和文件,它的概念是這樣的應用程序,我有兩個備份文件夾和他們有相同的內容,比方說Backup1
和Backup2
,如果我重新命名子文件夾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
文件夾不能重命名。它拋出一個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
這是因爲路徑的好,爲什麼它有一個錯誤。但是,我如何正確地重命名它?以及如何遞歸執行,並且多個項目被重命名?
看看在Io.Path方法(https://msdn.microsoft.com/en-us/library/system.io.path%28v = vs.110%29.aspx?F = 255&MSPPError = -2147217396) – dbasnett