C# 使用WebRequest与WebClient时的不同结果

C# 使用WebRequest与WebClient时的不同结果,c#,webclient,webrequest,C#,Webclient,Webrequest,我们有一个自动生成并放入web服务器的文本文件。任务是逐行读取文件并将记录插入数据库中。下面的代码是C#: 当我这样做的时候,我不断地得到整个文件,范围从9000到10000行。另一方面,当我使用以下命令时,有时会得到一个被截断的文件(更少的行) 有人能解释这两者的区别吗?为什么结果会不同?我的印象是WebClient只是HttpWebRequest的一个包装。使用Peek方法,您可以保证有一个完整的行准备就绪 我打赌你得到了部分线(实际上在当前流位置断开) 事实上,我不认为这与这两门课中的任何

我们有一个自动生成并放入web服务器的文本文件。任务是逐行读取文件并将记录插入数据库中。下面的代码是C#:

当我这样做的时候,我不断地得到整个文件,范围从9000到10000行。另一方面,当我使用以下命令时,有时会得到一个被截断的文件(更少的行)


有人能解释这两者的区别吗?为什么结果会不同?我的印象是WebClient只是HttpWebRequest的一个包装。

使用
Peek
方法,您可以保证有一个完整的行准备就绪

我打赌你得到了部分线(实际上在当前流位置断开)

事实上,我不认为这与这两门课中的任何一门有关,但更多的是与你如何阅读结果有关


您尝试过这个方法吗?

WebClient OpenRead方法是WebRequest的包装器。事实上,它看起来与您发布的WebRequest代码几乎相同。我检查了ILSpy中的WebCLient以确认。我怀疑问题出在别处。您能调试并确认您正在读取的行是您期望的吗?这是一个好主意(使用DownloadString()方法),然后将字符串拆分为单独的记录以插入。这很管用。只要小心绳子的长度。。。如果目标文件很长(几MB),则必须等待整个文件下载,并且内存消耗会很高
            WebRequest request = WebRequest.Create(url);
            WebResponse response = request.GetResponse();
            StreamReader r = new StreamReader(response.GetResponseStream());

            while (r.Peek() > -1)
            {
                string s = r.ReadLine().Trim();
                //insert string into a db.
            }
            WebClient client = new WebClient();
            StreamReader r = new StreamReader(client.OpenRead(url));

            while (r.Peek() > -1)
            {
                string s = r.ReadLine().Trim();
                //insert string into a db.
            }