gpt4 book ai didi

c# - 如何避免Webclient下载0字节文件报错

转载 作者:可可西里 更新时间:2023-11-01 16:30:40 31 4
gpt4 key购买 nike

使用以下代码下载文件时:

WebClient wc = new WebClient();
wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);
wc.DownloadFileAsync("http://path/file, "localpath/file");

下载过程中出现错误(无网络连接、找不到文件等)它会在 localpath/file 中分配一个 0 字节的文件,这会让人非常恼火。

有没有办法以干净的方式避免这种情况?

(我已经在下载错误时探测 0 字节文件并将其删除,但我认为这不是推荐的解决方案)

最佳答案

如果您对 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();

关于c# - 如何避免Webclient下载0字节文件报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544043/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com