使用以下代码下载文件时:
WebClient wc = new WebClient();
wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);
wc.DownloadFileAsync("http://path/file, "localpath/file");
并且在下载过程中发生错误(没有互联网连接,找不到文件等) 它在localpath / file中分配一个0字节的文件,这可能会非常烦人。
有没有办法以干净的方式避免这种情况?
(我已经在下载错误时探测0字节文件并将其删除,但我不认为这是推荐的解决方案)
答案 0 :(得分:3)
如果您对WebClient.DownloadFile
的代码进行反向工程,您会看到FileStream
在下载开始之前已实例化。这就是即使下载失败也会创建文件的原因。没有办法修改代码,所以你应该采用不同的方法。
有很多方法可以解决这个问题。考虑使用WebClient.DownloadData
而不是WebClient.DownloadFile
,只在下载完成后创建或写入文件,并确定您拥有所需的数据。
WebClient client = new WebClient();
client.DownloadDataCompleted += (sender, eventArgs) =>
{
byte[] fileData = eventArgs.Result;
//did you receive the data successfully? Place your own condition here.
using (FileStream fileStream = new FileStream("C:\\Users\\Alex\\Desktop\\Data.rar", FileMode.Create))
fileStream.Write(fileData, 0, fileData.Length);
};
client.DownloadDataAsync(address);
client.Dispose();