2013-07-27 86 views
2

我有一個路徑D:\ myfolder1 \ mysubfolder 我想將mysubfolder移動到根(D :) 這裏是我嘗試使用的代碼,它給了我一個錯誤,說無效參數。移動目錄中的文件夾

Public Sub Movefolder() 
    Dim listFolders() As String = Directory.GetDirectories("D:\myfolder1") 
    Dim curf As String 

    For Each curf In listFolders 'listfolders(1) would be the mysubfolder 
     Dim DirInfo As New System.IO.DirectoryInfo(curf) 
     Directory.Move(curf, "D:\") 'This is where I get the error 
    Next 

End Sub 

任何人都可以指出我在做什麼錯或有更容易或至少另一種方式嗎?

+1

什麼你'做錯了沒有閱讀['Directory.Move()'](http://msdn.microsoft.com/en-us/library/system.io.directory.move.aspx)的文檔,特別是**備註**下的第一句話。目標必須是將由移動創建的新目錄的名稱,而不是其預期的父目錄。即使用現有目錄作爲目的地(即'D:\'不起作用),則需要將其與源目錄的基本名稱一起加入。 – millimoose

回答

3

根據docs,目標路徑必須爲包括您正在移動的文件或目錄的新名稱。

正如你已經檢索DirectoryInfo文件夾被移動,你可以用它Name property讓你在移動的目錄,然後你就可以追加到目標路徑的名稱:

For Each curf In listFolders '// listfolders(1) would be the mysubfolder 
    Dim DirInfo As New System.IO.DirectoryInfo(curf) 
    Directory.Move(curf, Path.Combine("D:\", DirInfo.Name)) 
Next 
+0

非常感謝你的工作。但它對我來說沒有任何邏輯意義。如果你能解釋我。 dirinfo.name保存字符串D:\ myfolder1 \ mysubfolder,並將它與「D:\」再次結合起來,請問怎麼回事? – XcOder

+0

@ user2625656:不,不完全。無論名稱是什麼,DirectoryInfo實例都可以像一個表示目錄的對象一樣想象。現在,對象的各種屬性爲您提供有關目錄的信息 - 例如[FullName](http://msdn.microsoft.com/zh-cn/library/system.io.filesysteminfo.fullname.aspx)將返回目錄的完整路徑(「D:\ myfolder1 \ mysubfolder」)和['Name'](http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.name。 aspx)將只返回目錄本身的名稱(「mysubfolder」)。 –

相關問題