检测OpenFileDialog何时返回下载的URL / URI

时间:2015-09-14 02:57:21

标签: c# .net vb.net openfiledialog

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

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

我已经尝试拦截FileOK事件并检查Filename属性以查看它是否是HTTP / FTP URI,但无论文档说明了什么(“当用户通过单击打开按钮选择文件名时发生在文件下载后,它被解雇,因此我无法访问该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”,它会告诉我文件是下载的还是最初的本地文件。如果这是第一种情况,我会删除它。

1 个答案:

答案 0 :(得分:1)

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

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...
    }
}