File.Delete = IOException(另一个进程仍在使用该文件)

时间:2012-07-04 02:41:23

标签: c# webclient ioexception

我的申请有点问题。在我的应用程序中,我想通过webclient.DownloadFileAsync下载一些文件,如果用户在下载仍在运行时退出程序,我想取消该webclient-process&也删除该文件。

我已经尝试使用以下代码,但它不能正常工作,因为我总是得到IOException(其他进程正在使用的文件)。

            for (z = 0; z < CheckedCount; z++)
        {
            MultiWebclient[z].CancelAsync();
            MultiWebclient[z].Dispose();

            dgvDownloads.Rows[z].Cells[5].Value = "Canceled";
            File.Delete(selectedFolder + _downloadRowNameList[z] + ".mp4");
        }

3 个答案:

答案 0 :(得分:1)

下载例程附带下载文件,当您尝试删除这些文件时,会出现错误。你可以尝试一些事情。

  1. 使用计时器重复检查下载例程是否释放文件句柄,您可以在30秒后检查。这样,只要通过下载例程释放句柄,就可以删除文件。

  2. 当用户取消操作并在下次应用程序启动时删除文件时,您可以存储要删除的文件的路径/文件名。

答案 1 :(得分:0)

您的MultiWebClient可能仍然在流中打开文件。 Dispose方法真正做了什么? 我想Dispose方法也可以异步地进行一些工作,当你的流到达那个文件时你的流仍然是打开的。 底线是某个地方有这个文件的东西,而且最大的怀疑就是MultiWebClient。

答案 2 :(得分:0)

我不确定这是否是一个合法的解决方案,但我设法通过使用额外的按钮取消webclient(webclient.CancelAsync();)并放置File.Delete()来解决我的问题;在一个if(e.Cancelled)语句中,将在DownloadFileCompleted事件中触发。