我试图实现一个服务,如果某个条件满足,会将目录移动到另一个目录,我尝试了这个代码:
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,依此类推?
任何帮助将非常感谢。
答案 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"