在WebClient.DownloadFile

时间:2017-09-11 23:59:08

标签: c# web webclient

我想知道在下载之前如何检查文件是否存在。

当前代码:

string url = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/text.txt";
string path = "asdf.wix.com/text.txt";

using (var client = new WebClient())
{
    client.DownloadFile(url, path);
}

代码有效但如果网站上缺少该文件,则会创建一个导致问题的空text.txt。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

如果url var指向PC上的某个位置,那么您可以使用System.IO.File.Exists检查是否存在:

if(!System.IO.File.Exists(url))
{
    //code that handles the file dne case.. maybe log and return?
}

如果它指向一个偏远的位置,那么我不确定如何事先检查它的存在。

但是,您可以处理WebClient返回的404案例并删除错误的text.txt文件

using (var client = new WebClient())
{
    try
    {
        client.DownloadFile(url, path);
    }
    catch (WebException e)
    {
        var statusCode = ((HttpWebResponse) e.Response).StatusCode;

        if (statusCode == HttpStatusCode.NotFound && System.IO.File.Exists(path))
        {
            System.IO.File.Delete(path);
            //maybe log the occurence as well
        }
    }
}

答案 1 :(得分:0)

如果您需要特定行为,请考虑使用HttpWebRequest代替WebClientWebClient做了很多" automagic"。

var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
using (var response = request.GetResponse()) {
    using (var responseStream = response.GetResponseStream()) {   
        using (var fileToDownload = new System.IO.FileStream(path,  System.IO.FileMode.Create,  System.IO.FileAccess.ReadWrite)) {
            responseStream.CopyTo(fileToDownload);
        }
    }
}

使用此方法,您可以控制下载文件的创建时间 - 即开始下载后。如果服务器上不存在该文件,则在创建文件之前它将出错。您可以在创建FileStream之前添加其他错误检查,例如检查预期的内容类型等。