我想知道在下载之前如何检查文件是否存在。
当前代码:
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。
有什么想法吗?谢谢!
答案 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
代替WebClient
。 WebClient
做了很多" 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
之前添加其他错误检查,例如检查预期的内容类型等。