下载程序中碰到困难!难!难!难!难!大侠们赶快进阿!!!!!
我在写一个下载的程序,我发现很多的网站Content-Length = -1 ,用Read的Count==0来判断返回流结束的,而事实上如果网比较慢,即使流没有结束 Read的Count也经常为0。而且还没有异常发生。
我有什么办法吗?
以下是我的代码,请审阅!谢谢先!
public static int BUFFER_SIZE = 32768;
public static string GetURLContentString(string url)
{
//StringBuilder buffer = new StringBuilder();
byte[] buffer = null;
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.KeepAlive = false;
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream streamResponse=httpWebResponse.GetResponseStream();
BinaryReader binaryReader = new BinaryReader(streamResponse);
buffer = null;
byte[] blockBuffer = binaryReader.ReadBytes(BUFFER_SIZE);
while (blockBuffer.Length > 0)
{
if(buffer == null)
{
buffer = new byte[blockBuffer.Length];
blockBuffer.CopyTo(buffer,0);
}
else
{
byte[] bufferTmp = new byte[blockBuffer.Length + buffer.Length];
buffer.CopyTo(bufferTmp,0);
Array.Copy(blockBuffer,0,bufferTmp,buffer.Length - 1, blockBuffer.Length);
buffer = bufferTmp;
}
if(blockBuffer.Length < BUFFER_SIZE)
break;
blockBuffer = binaryReader.ReadBytes(BUFFER_SIZE);
}
binaryReader.Close();
streamResponse.Close();
httpWebResponse.Close();
return Encoding.GetEncoding("GB2312").GetString(buffer, 0, buffer.Length);
}
catch(ArgumentException e)
{
Console.WriteLine("\nThe second HttpWebRequest object has raised an Argument Exception as 'Connection' Property is set to 'Close'");
Console.WriteLine("\n{0}",e.Message);
}
catch(WebException e)
{
Console.WriteLine("WebException raised!");
Console.WriteLine("\n{0}",e.Message);
Console.WriteLine("\n{0}",e.Status);
}
catch(Exception e)
{
Console.WriteLine("Exception raised!");
Console.WriteLine("Source :{0} " , e.Source);
Console.WriteLine("Message :{0} " , e.Message);
}
return buffer.ToString();
}