【问题标题】:FolderBrowserDialog not saving files where selectedFolderBrowserDialog 不保存选定的文件
【发布时间】:2018-03-27 19:07:10
【问题描述】:

我正在尝试制作一个有趣的 YouTube 下载器。我看了一些教程,我完成了,但是当我下载它并选择路径时,如果我选择“桌面”,它不会下载,但如果我在桌面上选择一个文件夹,它会下载它但不在文件夹中,在桌面。我试图修复它,但没有任何效果。

我该如何解决?

这是我的代码:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles download.Click
    If url.Text <> "" Then
        If FolderBrowserDialog1.ShowDialog = DialogResult.OK Then
            stato.Text = "Downloading"
            Dim video = YouTube.Default.GetVideo(url.Text)
            FolderBrowserDialog1.RootFolder = Environment.SpecialFolder.DesktopDirectory
            File.WriteAllBytes(FolderBrowserDialog1.SelectedPath & video.FullName, video.GetBytes())
            stato.Text = "Done!"
        End If
    Else
        MsgBox("Enter an URL!")
    End If
End Sub

【问题讨论】:

  • 你的条件对我来说没有意义,如果你显示FolderBroswerDialog,那么当用户可以选择他想要的任何文件夹时,你为什么要设置RootFolder???
  • 当您在调试器中查看结果时,您看到了什么?它可能有什么问题?使用Path.Combine() 创建合法文件名
  • 建议在代码中提供更多解释和 cmets。

标签: vb.net folderbrowserdialog


【解决方案1】:

如果 SelectedPath 没有文件,请上一级,因为文件很可能在那里。这是你的修复,所以它会进入正确的文件夹:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles download.Click
    If url.Text <> "" Then
        FolderBrowserDialog1.RootFolder = Environment.SpecialFolder.DesktopDirectory
        If FolderBrowserDialog1.ShowDialog = DialogResult.OK Then
            stato.Text = "Downloading"
            Dim video = YouTube.Default.GetVideo(url.Text)
            File.WriteAllBytes(System.IO.Path.Combine(FolderBrowserDialog1.SelectedPath, video.FullName), video.GetBytes())
            stato.Text = "Done!"
        End If
    Else
        MsgBox("Enter an URL!")
    End If
End Sub

请注意,我建议您使用 backgroundworker 组件来代替下载。此外,理想情况下,您应该在保存时将字节保存到后台工作程序中的文件中,因此字节不会全部进入内存,而是直接进入您的文件。不过,这些建议超出了您的问题范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多