枚举大量目录并将其移动到另一个目录

时间:2014-06-05 21:02:40

标签: .net vb.net windows-services

我试图实现一个服务,如果某个条件满足,会将目录移动到另一个目录,我尝试了这个代码:

Dim dirInfo As New DirectoryInfo("C:\foo")
Dim name As String
For Each dir As System.IO.DirectoryInfo In dirInfo.GetDirectories()
    name = dir.Name
    If needsToMove(name) Then
        dir.MoveTo("C:\bar\" & nombre)
    End If
Next

这个问题的主要问题是C:\foo可能有 300000 目录(没有内部文件夹),并且执行该代码非常昂贵。

是否有更快的方式移动目录或列出目录?


有没有办法列出前1000个目录,然后列出下一个1000,依此类推?

任何帮助将非常感谢。

1 个答案:

答案 0 :(得分:0)

如果您注意到,当您在Windows中复制粘贴许多目录时,它会为您提供一个包含进度和取消按钮的弹出窗口。所以,即使是Windows也不能超快。

对于您的问题,您需要设计递归方法,如下所示

public sub DirectoriesRecursively(parentDir as string, destination as string)

    '--> here, if destination don't exist, create

    '--> here do for each file in your parent dir and [if needs to move] copy them to destination 

    '--> here do for each folder in your parent dir and call 
    DirectoriesRecursively(parentDir & "\" & folderName, destination & "\" & folderName)

End Sub

' usage
DirectoriesRecursively("c:\folder1", "d:\folder111")

因此,您以递归方式调用此方法,并在需要时移动所有文件和文件夹。我没有输入特定的代码,因为我知道你知道怎么做。

现在,如果文件被锁定,你想放置Try-Catch。你可以重试。您应该使用backgroundworker,因此如果用户想要取消,您可以插入取消代码。

这里有很多选项和可能的版本,但关键字是你 - " recursive"