首页 > 解决方案 > 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 引发异常,说明文件正在使用中。

有什么方法可以关闭然后删除吗?

标签: c#webclient

解决方案


下载文件异步(Uri、字符串、对象)

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

这意味着文件可能(或可能不会)在您调用之前完全下载File.Delete(sbFileLocation.ToString());。这是典型的竞争条件,完全解释了您的错误。

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

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


推荐阅读