2011-11-23 97 views
2

我有一些代码可以从网站下载文本文件。当请求的文件不存在时,我的应用程序会下载包含html内容的文本文件。我需要过滤这个html内容(如果请求的文件不存在,不应该下载包含html内容的文本文件),并且只需要下载具有正确内容的文本文件。以下是我的代码。使用C下载文件#

string FilePath = @"C:\TextFiles\" + FileName + String.Format("{0:00000}", i) + ".TXT"; 
Directory.CreateDirectory(Path.GetDirectoryName(FilePath)); 
//MessageBox.Show(FilePath); 

using (FileStream download = new FileStream(FilePath, FileMode.Create)) 
{ 
    Stream stream = clientx.GetResponse().GetResponseStream(); 
    while ((read = stream.Read(buffer, 0, buffer.Length)) != 0) 
    { 

     download.Write(buffer, 0, read); 

    } 
} 

请指点

+0

如果找不到文件,您需要显示一个html页面吗? – giftcv

+0

不,html页面不应该下载。实际上它不是一个html页面。 HTML内容的文本文件 – Kevin

回答

1

假设clientxHttpWebRequest然后就检查响应的StatusCode:

HttpWebResponse response = (HttpWebResponse)clientx.GetResponse(); 
if (response.StatusCode != HttpStatusCode.OK) 
{ 
    MessageBox.Show("Error reading page: " + response.StatusCode); 
} 
else 
{ 
    string FilePath = @"C:\TextFiles\" + FileName + String.Format("{0:00000}", i) + ".TXT"; 
    Directory.CreateDirectory(Path.GetDirectoryName(FilePath)); 
    //MessageBox.Show(FilePath); 
    using (FileStream download = new FileStream(FilePath, FileMode.Create)) 
    { 
     Stream stream = response .GetResponseStream(); 
     while ((read = stream.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      download.Write(buffer, 0, read); 
     } 
    } 
} 
+0

是HttpWebRequest:当我使用HttpWebResponse响应= clientx.GetResponse()即时通讯有错误消息:\t不能隐式地将类型'System.Net.WebResponse'转换为'System.Net.HttpWebResponse'。存在明确的转换(您是否缺少演员?) – Kevin

+0

请参阅我的编辑,尝试让'HttpWebResponse response =(HttpWebResponse)clientx.GetResponse();' –

+0

yes;但仍然下载带有html内容的文件。在网站上有一些文本文件,其中有一些歌曲。当请求文件存在时被下载,当不存在时应用程序下载带有该网页的html内容的文本文件。我需要解决这个问题 – Kevin

1

我建议你应该测试ReponseCode。

如果文件存在并发送给您或404“未找到”代码,您会期望得到200个“OK”代码。

尝试:

var response = clientx.GetResponse(); 
HttpStatusCode code = response.StatusCode; 

if (code == HttpStatusCode.OK) 
{ 
    //get and download stream.... 
} 

编辑:

您需要的WebReponse铸造成一个HttpWebResponse(见http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse.aspx

尝试:

using(HttpWebReponse response = (HttpWebResponse)clientx.GetResponse()) 
{ 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     string FilePath = @"C:\TextFiles\" + FileName + String.Format("{0:00000}", i) + ".TXT"; 
     Directory.CreateDirectory(Path.GetDirectoryName(FilePath)); 

     using (FileStream download = new FileStream(FilePath, FileMode.Create)) 
     { 
      Stream stream = clientx.GetResponse().GetResponseStream(); 
      while ((read = stream.Read(buffer, 0, buffer.Length)) !=0) 
      { 
       download.Write(buffer, 0, read); 
      } 
     } 
    } 
} 
3

你也可以使用WebClientHttpWebRequest代替:

var client = new WebClient(); 
client.DownloadFile("http://someurl/doesnotexist.txt", "doesnotexist.txt"); 

,这将抛出一个System.Net.WebException如果文件不存在。