VB.NET从递归搜索重新创建在其他位置找到的文件夹

VB.NET从递归搜索重新创建在其他位置找到的文件夹,vb.net,recursion,directory,create-directory,Vb.net,Recursion,Directory,Create Directory,我对所有文件和子文件夹进行递归搜索,但我想在另一个目录中创建确切的文件夹结构 我将非常感谢您的帮助,我已经尝试过自己做这件事,也尝试过上网,但是我还没有找到任何东西 因此,我希望ConvertDir中的文件夹结构在SaveDir位置重新创建,而不包含任何文件。我也希望在发现它们的同时创造它们,但我不知道这是否可行或明智 这将创建在SaveDir顶层找到的文件夹,但文件夹位置不正确 这是我的代码副本: On Error Resume Next Dim ObjFolder Dim

我对所有文件和子文件夹进行递归搜索,但我想在另一个目录中创建确切的文件夹结构

我将非常感谢您的帮助,我已经尝试过自己做这件事,也尝试过上网,但是我还没有找到任何东西

因此,我希望ConvertDir中的文件夹结构在SaveDir位置重新创建,而不包含任何文件。我也希望在发现它们的同时创造它们,但我不知道这是否可行或明智

这将创建在SaveDir顶层找到的文件夹,但文件夹位置不正确

这是我的代码副本:

On Error Resume Next

    Dim ObjFolder
    Dim ObjSubFolders
    Dim ObjSubFolder
    Dim ObjFiles
    Dim ObjFile
    Dim objFileSecuritySettings
    Dim intRetVal
    Dim objSD
    Dim objFolderSecuritySettings

    ObjFolder = FSO.GetFolder(FolderName)
    ObjFiles = ObjFolder.Files

    For Each ObjFile In ObjFiles  'Write all files to output files

        objFileSecuritySettings = _
        objWMIService.Get("Win32_LogicalFileSecuritySetting='" & ObjFile.Path & "'")
        intRetVal = objFileSecuritySettings.GetSecurityDescriptor(objSD)

        If intRetVal = 0 Then

            ObjOutFile.WriteLine(ObjFile.Path) ' write in CSV format

        End If

    Next

    ObjSubFolders = ObjFolder.SubFolders     'Getting all subfolders

    For Each ObjFolder In ObjSubFolders

        objFolderSecuritySettings = _
        objWMIService.Get("Win32_LogicalFileSecuritySetting='" & ObjFile.Path & "'")
        intRetVal = objFolderSecuritySettings.GetSecurityDescriptor(objSD)
        Directory.CreateDirectory(SaveDir + "\\" + ObjFolder.name)

        If intRetVal = 0 Then

            ObjOutFile.WriteLine(ObjFolder.Path) ' write in CSV format
            ObjOutFile.WriteLine(ObjFolder.ObjSubFolders)

        End If

        Gather(ObjFolder.Path)

    Next
先谢谢你


AntonSK

您可以使该方法传递到它开始于的根文件夹,以保持目录树的完整性。 并按如下方式使用:

ReCreateDirectoryStructure("C:\somefolder\", "D:\")

Private Sub ReCreateDirectoryStructure(ByVal sourceDir As String, _
        ByVal targetDir As String, Optional ByVal rootDir As String = "")
    If rootDir = String.Empty Then
        rootDir = sourceDir
    End If
    Dim folders() As String = IO.Directory.GetDirectories(sourceDir)
    For Each folder As String In folders
        Directory.CreateDirectory(folder.Replace(rootDir, targetDir))
        ReCreateDirectoryStructure(folder, targetDir, rootDir)
    Next
End Sub

我认为这应该是非常可行的,类似于将
Directory.CreateDirectory(SaveDir+“\\\”+ObjFolder.name)
替换为
Directory.CreateDirectory(ObjFolder.path.Replace(FolderName,SaveDir))
不幸的是,这个方法与我已有的方法相同,它将创建文件夹,但会将它们全部放在SaveDir的顶层,而不是将文件夹和子文件夹放在正确的区域。这不是VB.net,这是经典的ASP!