猿问

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 引发异常,说明文件正在使用中。


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


蝴蝶不菲
浏览 266回答 1
1回答

精慕HU

下载文件异步(Uri、字符串、对象)将具有指定 URI 的资源下载到本地文件。此方法不会阻塞调用线程。这意味着文件可能(或可能不会)在您调用之前完全下载File.Delete(sbFileLocation.ToString());。这是典型的竞争条件,完全解释了您的错误。此方法下载地址参数中指定的 URI 处的资源。下载成功完成后,下载的文件在本地计算机上名为 fileName。该文件是使用从线程池中自动分配的线程资源异步下载的。要在文件可用时接收通知,请将事件处理程序添加到 DownloadFileCompleted 事件。您需要使用DownloadFileCompleted事件、同步WebClient.DownloadFile方法或await基于任务的WebClient.DownloadFileTaskAsync方法
随时随地看视频慕课网APP
我要回答