文件夹浏览器替换

时间:2019-09-17 15:09:34

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

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

您在下面看到的代码非常有用,但仅适用于单个文件。我尝试将所有的“ 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

我希望文件夹浏览器对话框只是将文件下载到该文件夹​​中的常规保存路径,但是出现错误。 上面的代码有效,但仅适用于单个文件。

我有一段代码可以检索下载的名称和扩展名,一旦我确定了这一部分,我打算将其添加到路径中。

1 个答案:

答案 0 :(得分:0)

您可以使用FolderBrowserDialog。获取路径后,将其与要下载的每个文件名结合在一起。使用DialogFlow

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 的情况下,我不会发布IDisposable对象的答案(在大多数情况下),因此FolderBrowserDialog和WebClient都在Using s中。在下载之前,您可能需要向WebClient添加其他配置。

此外,您可能不需要每个异常的单独消息(如果有的话)。因此,消息可以被缓存并一次全部显示。

我插入了Using,供您在完成后将控制状态恢复为默认状态。这取决于您。

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