【问题标题】:Copying multiple sources to single destination将多个源复制到单个目标
【发布时间】:2016-03-23 15:52:51
【问题描述】:

我是 VB.net 的新手,我正在尝试创建一个备份实用程序来将一组本地文件夹复制到带有进度条的单个备份目标(例如在 USB 上)。在过去几个小时谷歌搜索后,我只能找到单个文件夹到单个目的地的示例。

谁能指出我的例子?

更新:

基于@Werdna 示例,我创建了一个简单的 FOR EACH NEXT 循环。然而,下一个问题是只有源目录中的文件被复制到目标目录,而不是文件夹及其所有内容。谁能看到我哪里出错了?

Public Class Form1

Private Sub Start_Click(sender As Object, e As EventArgs) Handles Start.Click

    Dim destination = "E:\Backup Folder"

    Dim sources As New List(Of String)

    sources.Add("D:\Profiles\Users\Desktop")
    sources.Add("D:\Profiles\Users\Mail")
    sources.Add("D:\Profiles\Users\Downloads")

    For Each source As String In sources
        My.Computer.FileSystem.CopyDirectory(source, destination)
    Next
    MessageBox.Show("Copy Completed")
End Sub
End Class 

另外,使用 FOR EACH NEXT 循环计算要复制的文件数的最佳方法是什么?我想将金额输出到标签,并随着实用程序的发展将其用作进度条。

【问题讨论】:

  • single folder to single 那么你想要什么呢?
  • 也使用后台工作者,带有进度条,并且您将使用的任何 GUI 在复制过程中都不会冻结。

标签: vb.net


【解决方案1】:

这是我为您快速编写的内容,让您了解我是如何完成您的任务的。您将需要向您的应用程序添加 2 个列表框、一个文件夹打开对话框和一些按钮,这可能不是您想要的,不幸的是您无法使用其他对话框选择多个文件夹,但是,请看下面,代码并不完全,因为总是有事情要做,但是这应该会引导您朝着正确的方向前进!

Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For Each item In IO.Directory.GetDirectories("C:\")
        ListBox1.Items.Add(item)
    Next
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For Each item In ListBox1.SelectedItems
        ListBox2.Items.Add(item & "\")
    Next
    ListBox1.SelectedItem = Nothing
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    ListBox2.Items.Remove(ListBox2.SelectedItem)
    ListBox2.SelectedItem = Nothing
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    For Each item In IO.Directory.GetDirectories(ListBox1.SelectedItem)
        ListBox1.Items.Clear()
        ListBox1.Items.Add(item)
    Next
End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    If FolderBrowserDialog1.ShowDialog = DialogResult.OK Then
        My.Computer.FileSystem.CreateDirectory(FolderBrowserDialog1.SelectedPath)
        For Each item In ListBox2.Items
            My.Computer.FileSystem.CopyDirectory(item, FolderBrowserDialog1.SelectedPath)
        Next
        MessageBox.Show("Copy Completed.")
    End If
End Sub

End Class

我在大约 10 分钟内写了这篇文章,所以我没有改变来做一个进度条,但是如果这是你正在寻找的,那么我很乐意帮助你在你的程序中添加一个。快乐编码!

更新 - 基于您的新问题

Public Class Form1

Dim NumberofFILEs As Integer = 0

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click


    Dim Location1 = "C:\Backup Folder\TESTING\FOLDER"
    Dim source As String = "C:\TESTING\FOLDER"

    Dim source1 As String = "C:\TESTING1\FOLDER"
    Dim Location2 = "C:\Backup Folder\TESTING1\FOLDER"

    IO.Directory.CreateDirectory("C:\Backup Folder\TESTING\FOLDER")
    IO.Directory.CreateDirectory("C:\Backup Folder\TESTING1\FOLDER")


    For Each item In source
        My.Computer.FileSystem.CopyDirectory(source, Location1, True)
    Next


    For Each item In source1
        My.Computer.FileSystem.CopyDirectory(source1, Location2, True)
    Next
    MessageBox.Show("Completed")

    For Each file In source1.Count & source.Count
        NumberofFILEs += 1
    Next
    Label1.Text = NumberofFILEs
End Sub

结束类

根据需要编辑位置和目的地。复制目录末尾的 True 也意味着它将覆盖任何具有相同名称的文件,例如它会更新它们

【讨论】:

  • 感谢@Werdna!没有列表框有没有办法做到这一点?就像在字符串中预设源和目标一样?
  • @Adam 你想基本上点击添加以及它们如何进入某种列表?我相信你可以这样做,但是你必须逐个添加每个文件夹,例如 - 让 openfilediaglog 选择文件并将它们添加到列表框,然后将它们保存到目的地。
  • 再次感谢!通过您的示例,我学会了创建一个基本循环。如果您能提供更多帮助,我已经更新了我的答案。
  • 好的,我已根据您的问题更新了我的答案,以按照模式添加更多项目。 @亚当
  • 你更新的例子正是我所需要的。基于它,我完成了我的应用程序的核心并开始工作。我已将您的答案标记为解决方案。再次感谢您!
【解决方案2】:

您可以将每个文件夹复制到目标位置,一次一个。循环遍历源文件夹并将每个文件夹复制到目标文件夹。

【讨论】:

  • 你会碰巧有一个代码 sn-p 或示例吗?我很想看看语法。
猜你喜欢
  • 1970-01-01
  • 2021-02-18
  • 2019-09-01
  • 2021-05-09
  • 2020-03-22
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2019-06-30
相关资源
最近更新 更多