VB.NET из рекурсивного поиска воссоздает папки, найденные в другом месте

У меня есть рекурсивный поиск всех файлов и подпапок, но я хочу создать точную структуру папок в другом каталоге.

Я буду очень признателен за помощь в этом, я попытался сделать это сам, а также искал в Интернете, но я еще ничего не смог найти.

Поэтому я хочу, чтобы структура папок из 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

Заранее спасибо.

АнтонСК


person Anton King    schedule 28.08.2013    source источник
comment
Я думаю, что это должно быть вполне выполнимо, что-то вроде замены Directory.CreateDirectory(SaveDir + "\\" + ObjFolder.name) на Directory.CreateDirectory(ObjFolder.path.Replace(FolderName, SaveDir))   -  person Raphael Smit    schedule 28.08.2013
comment
К сожалению, этот метод делает то же самое, что и тот, который у меня уже есть, он создает папки, но помещает их все на верхний уровень SaveDir, а не помещает папки и подпапки в нужную область.   -  person Anton King    schedule 29.08.2013
comment
это не VB.net, это классический ASP!   -  person Michael B.    schedule 29.08.2013


Ответы (1)


Вы можете сделать так, чтобы метод передавал корневую папку, в которой он был запущен, чтобы дерево каталогов оставалось нетронутым. И используйте его как таковое:

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
person Raphael Smit    schedule 29.08.2013