我正在使用以下代码下载文件并验证下载是否成功:
try
{
UpdateAvailable = false;
Downloading = true;
using (var webclient = new WebClient { CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore) })
{
var file = Path.Combine(basePath, filename);
await webclient.DownloadFileTaskAsync(updaterexe_fileurl, Path.Combine(basePath, updaterexe_filename));
await webclient.DownloadFileTaskAsync(updatefileurl, file);
}
if (!File.Exists(filename))
{
Error = "Error downloading update. Please try again.";
Log.Error("Error downloading update. Please try again (file does not exist).");
}
else
{
DownloadReady = true;
}
}
catch (Exception ex)
{
Log.Error("Error downloading update: " + ex);
Error = ex.Message;
}
finally
{
Downloading = false;
}
这在大多数情况下都适用。但我收到了来自最终用户的多份报告,有时他们会收到“再试一次”错误消息。
这怎么可能?很明显,WebClient没有抛出异常,但它也无法下载文件(它在磁盘上不存在)。
这是一个缓存问题吗?我错过了任何其他错误处理吗?
如果是磁盘缓存问题,我考虑添加以下内容:
int count = 0;
while (count < 3 || !File.Exists(filename))
{
Thread.Sleep(1000);
count++;
}
但这感觉非常黑客。
有什么想法吗?
答案 0 :(得分:2)
您下载到file
,Path.Combine(basePath, filename)
,但您从未查看file
是否存在,您检查filename
是否存在。
如果basePath
和当前工作目录不同,则文件“将不存在”。