我想下载巨大的XML文件的前N MB,因此可以使用HTMLAgilityPack关闭损坏的标签。不幸的是,我不能使用XMLReader。
我尝试在HTTP标头上设置范围,但这似乎不起作用,所以现在我尝试这样做:
public string download(string url, int mb)
{
Int32 bytesToGet = 1048576 * mb;
HttpWebRequest request;
request = WebRequest.Create(url) as HttpWebRequest;
var buffer = new char[bytesToGet];
using (WebResponse response = request.GetResponse())
{
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
sr.Read(buffer, 0, bytesToGet);
}
}
return new string(buffer);
}
但这仍然不起作用。我用mb = 5尝试了一下,但得到的XML文件只有几行。
您只调用Read()
一次,这并不能保证会填满您的缓冲区。保持下载的字节数并继续读取,直到缓冲区已满或到达流的末尾为止:
int offset = 0;
int bytesRead = 0;
do
{
bytesRead = sr.Read(buffer, offset, bytesToGet - offset);
offset += bytesRead;
} while (bytesRead > 0);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句