我构建了下载单个文件的简单方法。当我第一次调用该方法时一切正常,但是当第二次调用时没有下载文件 以下是我的代码:
public void DownloadFile(string fileUrl, string path)
{
using (var webClient = new WebClient())
{
webClient.DownloadFileCompleted += (sender, e) =>
{
if (e.Error == null & !e.Cancelled)
{
Debug.WriteLine(@"Download completed!");
}
};
var url = new Uri(fileUrl);
try
{
webClient.OpenRead(url);
string headerContentDisposition = webClient.ResponseHeaders["content-disposition"];
string filename = new ContentDisposition(headerContentDisposition).FileName;
Debug.WriteLine(filename);
path = Path.Combine(path, filename);
webClient.DownloadFileAsync(url, path);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
我已经确定了破坏我下载的部分,它是负责获取文件名的部分:
webClient.OpenRead(url);
string headerContentDisposition = webClient.ResponseHeaders["content-disposition"];
string filename = new ContentDisposition(headerContentDisposition).FileName;
如果我用string filename = "1.tmp";
替换该部分,我可以多次调用我的方法而没有错误。
我通过点击此事件点击按钮来调用该方法:
private void button1_Click(object sender, EventArgs e)
{
const string url = @"http://www.jtricks.com/download-text";
const string target = @"D:\TEMP\";
DownloadFile(url, target);
}
两次点击按钮后没有获取文件名的代码我在控制台中获得此输出:
1.tmp
Download completed!
1.tmp
Download completed!
当我添加获取文件名的部分时,这是我的输出:
content.txt
Download completed!
content.txt
我第二次点击开始我正在获取文件名,但下载没有开始,接下来点击块开始按钮。
我该如何解决这个问题?理想情况下,我想尽可能多地打电话给DownloadFile
。
答案 0 :(得分:0)
似乎WebClient
正在使用缓存。我建议您必须告诉WebClient
不要使用缓存:
webClient.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);