我正在使用OpenFileDialog(.Net Framework 4,Windows 10),我注意到它将允许用户指定一个URL作为文件名(例如,http://somewebsite/picture.jpg).这对我的应用程序非常有用,所以我不打算禁用它.它的工作方式是将文件下载到用户的临时目录中,并在对话框的Filename属性中返回临时文件名.这很好,除了用户开始在他/她的临时目录中建立垃圾的事实.
@H_502_6@
我想知道OpenFileDialog类下载文件的时间(而不是以前存在的文件),所以我可以通过在使用后删除文件进行清理.我可以检查文件的目录是否是临时目录,但这不是很好,因为用户可能已经自己下载了文件.@H_502_6@
我已经尝试拦截FileOK事件并检查Filename属性以查看它是否是HTTP / FTP URI,但不管文档说什么(“当用户通过单击OpenFileDialog的Open按钮选择文件名时发生” )它在文件下载后被触发,因此我无法访问URL:Filename属性已经具有临时文件名.@H_502_6@
@H_502_6@
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”,它会告诉我文件是下载的还是最初的本地文件.如果这是第一种情况,我会删除它.@H_502_6@
解决方法
没有明显的方法可以做到这一点,但作为一种解决方法,如何检查文件的位置?默认情况下,此对话框将文件下载到用户Temporary Internet Files目录,因此您可以引入一些看起来像这样的代码:
@H_502_6@
@H_502_6@
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... } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。