2013-07-27 53 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”)。 –

相关问题