【发布时间】:2011-07-26 14:54:25
【问题描述】:
如何删除浏览器中浏览过的文件? 错误提示“它正在被另一个进程使用”
preview_wb.Navigate(@"C:\mypdf.pdf");
private void close_btn_Click(object sender, EventArgs e)
{
preview_wb.Stop();
File.Delete(@"C:\mypdf.pdf");
}
【问题讨论】:
如何删除浏览器中浏览过的文件? 错误提示“它正在被另一个进程使用”
preview_wb.Navigate(@"C:\mypdf.pdf");
private void close_btn_Click(object sender, EventArgs e)
{
preview_wb.Stop();
File.Delete(@"C:\mypdf.pdf");
}
【问题讨论】:
通常人们建议这个代码:
webBrowser.Navigate("about:blank");
while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
File.Delete(fileName);
我不喜欢它。我更喜欢处理 DocumentCompleted 事件。
void DeleteFile()
{
needToDeleteFile = true;
webBrowser.Navigate("about:blank");
}
void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (needToDeleteFile)
{
File.Delete(fileName);
needToDeleteFile = false;
}
}
【讨论】:
您是否尝试过通过 Internet Explorer 缓存(使用 FindFirst/NextUrlCacheEntry API)查找文件并使用 DeleteUrlCacheEntry 将其删除?有预先编写的示例说明如何循环并在新的上进行删除,只需 google 即可。
您将获得 3 种类型的缓存,以“Cookie:”开头,另一种以“Visited:”开头 - 仅代表访问过的站点列表(它不是历史记录,不要混淆两者),最后一种类型只是以 http:// 或 https:// 开头的 url 形式出现。循环播放后,您可以选择要删除的内容。
如果您有任何其他问题,请告诉我,这样做应该可以消除“文件正在使用”问题,如果没有,请在执行缓存删除之前 .dispose 或卸载您的 webbrowser 控件(但您可能不需要)。
【讨论】:
如果您需要在文件被删除后保留“预览”,您可能别无选择,只能复制文件并导航到副本。
如果您愿意在删除文件时清除“预览”,请先离开它:
private void close_btn_Click(object sender, EventArgs e)
{
preview_wb.Navigate("about:blank");
File.Delete(@"C:\mypdf.pdf");
}
这应该可以解决问题。
【讨论】: