我正在使用以下代码下载文件并验证下载是否成功:
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++;
}
,但这感觉很骇人。
有什么想法?
您下载到file
,即Path.Combine(basePath, filename)
,但您永远不会检查是否存在file
,您检查是否存在filename
。
如果basePath
和当前的工作目录不同,则文件"将不存在"。