C# 如何防止在使用Webclient的DownloadString时出现大文件

C# 如何防止在使用Webclient的DownloadString时出现大文件,c#,webclient,C#,Webclient,我正在使用Webclient和DownloadString删除大量URL。 目的是获取每个url的页面源 但是,一些URL重定向到下载大文件,并且Webclient抛出错误: 内存不足 所以,我不想下载大文件。如何设置Webclient的最大下载大小?您可以使用Webclient实现这一点,但它提取了太多的细节,因此可能更方便直接使用WebRequest类进行控制,顺便说一句,Webclient本身也使用这些类 使用下划线,然后在达到字符限制后停止阅读ResponseStream 您的方法如下所

我正在使用
Webclient
DownloadString
删除大量URL。 目的是获取每个url的页面源

但是,一些URL重定向到下载大文件,并且
Webclient
抛出错误:

内存不足


所以,我不想下载大文件。如何设置
Webclient
的最大下载大小?

您可以使用Webclient实现这一点,但它提取了太多的细节,因此可能更方便直接使用WebRequest类进行控制,顺便说一句,Webclient本身也使用这些类

使用下划线,然后在达到字符限制后停止阅读ResponseStream

您的方法如下所示:

public static string DownloadAsString(string url)
{
    string pageSource = String.Empty;
    var req = (HttpWebRequest)WebRequest.Create(url);
    req.Method = "GET";
    req.UserAgent = "MyCrawler/1.0";
    req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
    var resp = (HttpWebResponse)req.GetResponse();

    // is this even html and not an image, or video       
    if (resp.ContentType.Contains("text/html"))
    {
        var sb = new StringBuilder();
        var buffer = new char[8192];
        // get the stream
        using (var stream = resp.GetResponseStream())
        using (var sr = new StreamReader(stream, Encoding.UTF8))
        {
            // start copying in blocks of 8K
            var read = sr.ReadBlock(buffer, 0, buffer.Length);
            while (read > 0)
            {
                sb.Append(buffer);
                // max allowed chars per source
                if (sb.Length > 50000)
                {
                    sb.Append(" ... source truncated due to size");
                    // stop early 
                    break;
                }
                read = sr.ReadBlock(buffer, 0, buffer.Length);
            }
            pageSource = sb.ToString();
        }
    }
    return pageSource;
}
你可以这样使用这个方法:

var src = DownloadAsString("http://stackoverflow.com");
Console.WriteLine(src);

这将输出组成堆栈溢出首页的html。请注意,此输出的上限为50000个字符,因此它将显示。。。源代码由于
src
字符串末尾的大小而被截断。

这个问题似乎让人混淆了您是要下载大文件还是要设置下载大小,如果文件大小超过,您就不想下载。而我想出了