File.Delete = IOException(文件仍由其他进程使用)



我的应用程序遇到了一点问题。使用我的应用程序,我想通过网络客户端下载一些文件。下载文件异步,如果用户在下载仍在运行时退出程序,我想取消该网络客户端进程并删除该文件。

我已经使用以下代码尝试过它,但它不能很好地工作,因为我总是得到一个 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");
        }

下载文件附有下载例程,当您尝试删除这些文件时,您会收到错误。您可以尝试的方法很少。

  1. 使用定时器反复检查文件句柄是否由下载例程释放,您可以在 30 秒后检查。这样,您将能够在通过下载例程释放句柄后立即删除文件。

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

您的多WebClient可能仍在流中打开文件。该处置方法到底有什么作用?我想Dispose方法也有可能异步执行一些工作,并且您的流在到达该文件时仍处于打开状态。底线是某个地方有该文件,最大的嫌疑人是MultiWebClient。

我不确定这是否是一个合法的解决方案,但我设法通过取消网络客户端(网络客户端。CancelAsync();)带有一个额外的按钮,并输入 File.Delete();在 if(e.Cancel)-语句中,该语句将在 DownloadFileComplete-事件中触发。

最新更新