C# 在WebClient.DownloadFile之前检查文件是否存在
我想知道如何在下载之前检查文件是否存在 当前代码:C# 在WebClient.DownloadFile之前检查文件是否存在,c#,web,webclient,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); } 代码可以工作,但如果站点上缺少该文
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,从而导致问题
有什么想法吗?谢谢大家! 如果url变量指向电脑上的某个位置,则可以使用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
}
}
}
如果需要特定行为,请考虑使用
HttpWebRequest
而不是WebClient
<代码>网络客户端执行大量的“automagic”
使用这种方法,您可以控制何时创建下载的文件,也就是在开始下载之后。如果服务器上不存在该文件,则在创建该文件之前会出错。在创建
FileStream
之前,您可以添加额外的错误检查,例如检查预期的内容类型等。因此,类似于写入随机目录,然后验证字节是否大于0,然后再验证文件。移动(随机目录,路径)或您是否有更好的方法我感觉这很容易出错。我已经更新了我的答案,告诉我在你的情况下该怎么做。谢谢,很好。我花了一分钟的时间来弄清楚如何在写入后关闭该文件,但我现在得到了它。如果该文件不存在,此代码将抛出异常。您可以捕获并忽略该异常。或者,您可以通过两个步骤来完成。在第一步中,使用与上面相同的代码,但不调用GetResponseStream(),并使用HEAD作为请求方法。如果文件存在,则返回200。它还将返回内容长度标题。您可以在下载之前检查200状态和conent length>200以确保文件存在。
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);
}
}
}