【问题标题】:Folder Browser Replacement文件夹浏览器更换
【发布时间】:2019-09-17 15:09:34
【问题描述】:

我希望能够添加多个下载链接并将它们放入用户在文件夹浏览器对话框中选择的单个文件夹

您在下面看到的代码效果很好,但仅适用于单个文件。我尝试将所有 'savefiledialog1' 改为 'folderbrowserdialog1'。然而,这导致我点击下载,即使只输入一个链接也没有任何反应。

 Private Sub BtnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
        If (SaveFileDialog1.ShowDialog() = DialogResult.OK) Then
            txtSave1.Text = SaveFileDialog1.FileName
            btnDownload.Enabled = True
        End If
    End Sub


    ' ------------ DOWNLOADING SECTION ------------
    Private WithEvents HTTPCLIENT As WebClient
    Private Sub BtnDownload_Click(sender As Object, e As EventArgs) Handles 
        btnDownload.Click
        btnDownload.Enabled = False
        txtSave1.Enabled = False
        btnBrowse.Enabled = False
        btnDownload.Enabled = False

        HTTPCLIENT = New WebClient
        Dim Download As String
            Download = Links(i)
            Dim User = Environment.UserName
            Dim Save As String = txtSave1.Text
            Try
                HTTPCLIENT.DownloadFileAsync(New Uri(Download), Save)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    End Sub

我希望文件夹浏览器对话框只是一个通用保存路径,正在下载的文件被放置到该文件夹​​中,但是我得到了一个错误。 上面的代码有效,但仅适用于单个文件。

我有可以检索下载名称和扩展名的代码,一旦我弄清楚这部分,我计划添加到路径中。

【问题讨论】:

    标签: vb.net file-management download-manager


    【解决方案1】:

    您可以使用 FolderBrowserDialog。获得路径后,将其与要下载的每个文件名结合起来。使用System.IO.Path.Combine()

    Private Sub BtnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
        Using fbd As New FolderBrowserDialog()
            If fbd.ShowDialog() = DialogResult.OK Then
                txtSave1.Text = fbd.SelectedPath
                btnDownload.Enabled = True
            End If
        End Using
    End Sub
    
    Private Sub BtnDownload_Click(sender As Object, e As EventArgs) Handles btnDownload.Click
        Try
            btnDownload.Enabled = False
            txtSave1.Enabled = False
            btnBrowse.Enabled = False
            btnDownload.Enabled = False
            Dim exceptionMessages As New List(Of String)
            Using client = New WebClient()
                ' configure client here as needed i.e. add Credentials
                For Each link In Links
                    Try
                        client.DownloadFileAsync(New Uri(link), Path.Combine(txtSave1.Text, link))
                    Catch ex As Exception
                        exceptionMessages.Add(ex.Message)
                    End Try
                Next
            End Using
            If exceptionMessages.Any() Then MessageBox.Show($"Exception{If(exceptionMessages.Count > 1, "s", "")}: {String.Join(Environment.NewLine, exceptionMessages)}")
        Finally
            txtSave1.Enabled = True
            btnBrowse.Enabled = True
            btnDownload.Enabled = True
        End Try
    End Sub
    

    请注意,如果没有 Using(在大多数情况下),我不会发布带有 IDisposable 对象的答案,因此 FolderBrowserDialog 和 WebClient 都在 Usings 中。您可能需要在下载之前向 WebClient 添加其他配置。

    此外,如果有的话,您可能不希望每个异常都单独显示消息。所以消息可以被缓存并一次显示。

    我插入了一个Finally 供您在完成后将控制状态设置回默认值。这取决于你。

    最后,工作是在 UI 线程上完成的,这可以从按钮单击处理程序内部的线程中得到证明。即使您没有阻止,您也应该将其移出 UI。这超出了问题的范围。

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 2018-09-14
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 2016-10-27
      相关资源
      最近更新 更多