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

本文关键字:URL URI 下载 OpenFileDialog 何时 返回 检测 | 更新日期: 2023-09-27 18:12:31

我使用的是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"设想了一个属性,它将告诉我文件是下载的还是最初是本地的。

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

没有明显的方法可以做到这一点,但是作为一种解决方法,检查文件的位置如何?默认情况下,这个对话框将文件下载到用户临时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...
    }
}