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 引发异常,说明文件正在使用中。
有什么方法可以关闭然后删除吗?
解决方案
将具有指定 URI 的资源下载到本地文件。此方法不会阻塞调用线程。
这意味着文件可能(或可能不会)在您调用之前完全下载File.Delete(sbFileLocation.ToString());
。这是典型的竞争条件,完全解释了您的错误。
此方法下载地址参数中指定的 URI 处的资源。下载成功完成后,下载的文件在本地计算机上名为 fileName。该文件是使用从线程池自动分配的线程资源异步下载的。要在文件可用时接收通知,请将事件处理程序添加到 DownloadFileCompleted 事件。
您需要使用DownloadFileCompleted
事件、同步WebClient.DownloadFile
方法或await
基于任务的WebClient.DownloadFileTaskAsync
方法
推荐阅读
- javascript - 在哪里安全地存储用于来自 Monzo bank api 的 api 请求的访问令牌
- javascript - 在 VueJs 中翻译语言时在 Mac OS 中获取未知符号
- python - 补丁装饰器 - 没有参数的副作用
- c++ - Wx Dev C++ vs Graphics.h?
- c# - 如何使用 Automapper 配置 MappingProfile?
- vb.net - 串口读写
- c# - c#8 中的公共接口成员
- google-cloud-platform - 从 Compute Engine 调用 Cloud Functions
- python - 如何使用 scipy 正确拟合两个参数(两个独立变量)
- python - 如何在机器人框架中检查或未检查单选按钮