【问题标题】:VB.net Backup Program that lists subfolders列出子文件夹的 VB.net 备份程序
【发布时间】:2014-09-19 20:34:19
【问题描述】:

第一次发帖,请轻拍。

我正在使用 Visual Studio Express 2010

我正在尝试创建一个备份程序,每晚将特定文件夹和文件备份到外部硬盘。

我正在使用:

Dim dirs As List(Of String) = New List(Of String)(Directory.EnumerateDirectories(dirPath))

获取本地驱动器上的目录列表,然后:

For Each folder In dirs

循环浏览所有目录,然后:

    If Not Directory.Exists(FdriveDirName) Then
    My.Computer.FileSystem.CopyDirectory(CdriveDirName, FdriveDirName, True)
    End if

这适用于第一个副本。我的问题是当我在根目录的文件夹中创建一个新文件夹时(例如,安装一个新程序会在 c: 的程序文件中创建一个新文件夹)这个新文件夹在我第二次运行程序时不会被复制。

我可以看到这背后的原因是 EnumerateDirectories 函数仅列出文件夹层次结构中下一级的文件夹。

我显然需要列出所有文件夹和子文件夹,但即使用 getdirectories 替换 EnumerateDirectories 也无济于事。

有任何想法的人吗?

【问题讨论】:

    标签: vb.net copy backup subdirectory


    【解决方案1】:

    你需要在树上行走。您需要创建一个递归函数遍历目录的子目录。 For example

    这里是关键:

    Private Sub RecurseDirectories(ByVal di As DirectoryInfo)
        Try
            For Each d In di.GetDirectories()
                'Do stuff with the d (directory) here.
                RecurseDirectories(d) 'get sub directories of this directory
            Next
        Catch
        End Try
    End Sub
    

    【讨论】:

      【解决方案2】:

      这可能会让您进入搜索“Depth First”的递归算法领域

      因此,您将创建一个函数,在处理当前级别的文件夹之前,您可以在每个文件夹上递归调用它:

      Public Sub ProcessFolders(ByVal inDirectoryPath As String)
          For Each subFolderPath In System.IO.Directory.GetDirectories(inDirectoryPath)
              ProcessFolders(subFolderPath)
      
              'build FdriveDirName
      
              If Not System.IO.Directory.Exists(FdriveDirName) Then
                  My.Computer.FileSystem.CopyDirectory(subFolderPath, FdriveDirName, True)
              End If
          Next
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-16
        • 1970-01-01
        • 2021-04-13
        相关资源
        最近更新 更多