C# WebClient.DownloadFileTaskAsync和File.Exists
我正在使用以下代码下载文件并验证下载是否成功:C# WebClient.DownloadFileTaskAsync和File.Exists,c#,wpf,asynchronous,webclient,C#,Wpf,Asynchronous,Webclient,我正在使用以下代码下载文件并验证下载是否成功: try { UpdateAvailable = false; Downloading = true; using (var webclient = new WebClient { CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore) })
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++;
}
int count=0;
while(count<3 | |!File.Exists(filename))
{
睡眠(1000);
计数++;
}
但这感觉很不舒服
有什么想法吗?你可以下载到
文件,即路径。组合(基本路径,文件名)
但你从不检查文件是否存在,而是检查文件名是否存在
如果basePath
与当前工作目录不同,则文件“将不存在”。我正在等待它,对吗?下载量约为8Mb。因此,如果没有等待,我应该得到更多的错误报告。@AkashKava等待
做什么?下载到文件
然后检查文件名是否存在有什么意义?@ta.speot.真是个好主意!我认为最终用户在不同的启动位置运行该程序。谢谢对接得好,谢谢。接受(当我能够:p)是的,这绝对是个问题。同时,我还为另一个文件添加了一个检查:)非常感谢。