【问题标题】:Detect when OpenFileDialog returns a downloaded URL/URI检测 OpenFileDialog 何时返回下载的 URL/URI
【发布时间】:2015-12-09 23:24:51
【问题描述】:

我正在使用 OpenFileDialog(.Net Framework 4,Windows 10),我注意到它允许用户将 URL 指定为文件名(例如,http://somewebsite/picture.jpg)。这对我的应用程序非常有用,所以我不打算禁用它。它的工作方式是将文件下载到用户的临时目录中,并在对话框的 Filename 属性中返回临时文件名。这很好,除了用户开始在他/她的临时目录中建立垃圾。

我想知道 OpenFileDialog 类何时下载了文件(而不是以前存在的文件),因此我可以在使用后通过删除文件来进行清理。我可以检查文件的目录是否是临时目录,但这不是很好,因为用户可能已经下载了他/她自己的文件。

我已经尝试拦截 FileOK 事件并检查 Filename 属性以查看它是否是 HTTP/FTP URI,但是不管文档说什么(“当用户通过单击打开按钮选择文件名时发生OpenFileDialog") 它在文件下载后被触发,所以我无法访问 URL:Filename 属性已经具有临时文件名。

编辑:这是我喜欢做的一个例子:

Dim dlgOpenFile As New System.Windows.Forms.OpenFileDialog

If dlgOpenFile.ShowDialog(Me) <> Windows.Forms.DialogResult.OK Then Return

''//do some stuff with dlgOpenFile.Filename

If dlgOpenFile.WasAWebResource Then
    Dim finfo = New IO.FileInfo(dlgOpenFile.Filename)
    finfo.Delete()
End If

在这个例子中,我设想了一个 dlgOpenFile "WasAWebResource" 的属性,它会告诉我文件是下载的还是最初是本地的。如果是第一种,我就删了。

【问题讨论】:

  • 你能提供一些代码吗?因为仅通过描述很难帮助您
  • 没什么大不了的。我添加了一些例子。我希望它有所帮助。
  • 这只是一个损坏的 UI 问题。 OpenFileDialog 不太适合浏览网络。但是,如果用户想要使用该功能,那么没有什么理由阻止他。如果您想知道它是一个 URL,那么您需要提供一个不同的 UI 小工具。类似于特定文件 + 打开 URL 命令和类似于浏览器地址栏的文本框。
  • 您可以删除临时目录中的所有文件,因为您可以假设这些文件在哪里下载?
  • @MattWilko,我在问题中已经说过,但这不是好的编程。

标签: c# .net vb.net openfiledialog


【解决方案1】:

没有明显的方法可以做到这一点,但作为一种解决方法,检查文件的位置如何?默认情况下,此对话框似乎将文件下载到用户 Internet 临时文件目录,因此您可以引入一些看起来像这样的代码:

FileDialog dialog = new OpenFileDialog();
if (dialog.ShowDialog() == DialogResult.OK)
{

    string temporaryInternetFilesDir = Environment.GetFolderPath(System.Environment.SpecialFolder.InternetCache);
    if (!string.IsNullOrEmpty(temporaryInternetFilesDir) && 
                dialog.FileName.StartsWith(temporaryInternetFilesDir, StringComparison.InvariantCultureIgnoreCase))
    {
        // the file is in the Temporary Internet Files directory, very good chance it has been downloaded...
    }
}

【讨论】:

  • 对不起,我才发现我用C#输入了答案,希望你能翻译好:)
  • 另外,我刚刚注意到你已经在问题中说了这个,道歉:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多