WebClient下载后使用中的文件

时间:2018-09-08 11:52:40

标签: c# webclient

我已经下载了一个文件,并尝试根据其大小将其删除,但是它表示该文件正在使用中。

WebClient wc = new WebClient();

wc.DownloadFileAsync(new Uri(sb.ToString()), sbFileLocation.ToString());

 if (new FileInfo(sbFileLocation.ToString()).Length == 0)
            {
                File.Delete(sbFileLocation.ToString());
            }

如您所见,File.Delete引发一个异常,指出该文件正在使用中。

是否可以通过某种方式将其关闭然后删除?

1 个答案:

答案 0 :(得分:4)

DownloadFileAsync(Uri, String, Object)

  

将具有指定URI的资源下载到本地文件。这个   方法不会阻止调用线程。

这意味着文件可能会(或可能不会)完全下载,然后再调用File.Delete(sbFileLocation.ToString());。这是典型的比赛情况,完全可以解释您的错误。

  

此方法将资源下载到URI中指定的URI处。   地址参数。下载成功完成后,   下载的文件在本地计算机上名为fileName。该文件是   使用以下线程资源异步下载   从线程池自动分配。 要接收   文件可用时通知,将事件处理程序添加到   DownloadFileCompleted事件。

您需要使用DownloadFileCompleted事件,同步WebClient.DownloadFile方法或await基于任务的WebClient.DownloadFileTaskAsync方法