WebClient.DownloadFileTaskAsync and File.Exists



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

        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和当前的工作目录不同,则文件"将不存在"。

相关内容

最新更新