WebClient.DownloadFileTaskAsync和File.Exists

时间:2014-02-03 09:00:38

标签: c# wpf asynchronous webclient

我正在使用以下代码下载文件并验证下载是否成功:

        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++;
            }

但这感觉非常黑客。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您下载到filePath.Combine(basePath, filename),但您从未查看file是否存在,您检查filename是否存在。

如果basePath和当前工作目录不同,则文件“将不存在”。