使用C#解析robots.txt文件中的各个行

Ste*_*ev0 4 c# webclient robots.txt

使用应用程序来解析robots.txt.我自己写了一个从网络服务器中提取文件的方法,并将输出放入文本框.我希望输出显示文件中每一行的单行文本,就像你正常查看robots.txt时一样,但是我的文本框中的输出是所有文本行而没有回车或换行.所以我觉得我很狡猾,为所有的线做一个字符串[],做一个foreach循环,一切都会很好.唉,这不起作用,所以我想我会尝试System.Enviornment.Newline,仍然无法正常工作.这是现在听起来的代码....我怎么能改变这个,所以我得到了robots.txt的所有单独行,而不是拼凑在一起的一堆文本?

public void getRobots()
{
    WebClient wClient = new WebClient();
    string url = String.Format("http://{0}/robots.txt", urlBox.Text);

    try
    {
        Stream data = wClient.OpenRead(url);
        StreamReader read = new StreamReader(data);
        string[] lines = new string[] { read.ReadToEnd() };

        foreach (string line in lines)
        {
            textBox1.AppendText(line + System.Environment.NewLine);
        }
    }
    catch (WebException ex)
    {
        MessageBox.Show(ex.Message, null, MessageBoxButtons.OK);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 7

您正在将整个文件读入lines数组的第一个元素:

string[] lines = new string[] {read.ReadToEnd()};
Run Code Online (Sandbox Code Playgroud)

所以你的循环所做的就是将文件的全部内容添加到TextBox中,然后是换行符.用以下代码替换该行:

string content = read.ReadToEnd();
string[] lines = content.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
Run Code Online (Sandbox Code Playgroud)

看看是否有效.

编辑:一种替代的,也许是更有效的方式,根据Fish的评论下面逐行阅读 - 用这个替换try块内的代码:

Stream data = wClient.OpenRead(url);
StreamReader read = new StreamReader(data);

while (read.Peek() >= 0) 
{
    textBox1.AppendText(read.ReadLine() + System.Environment.NewLine);
}
Run Code Online (Sandbox Code Playgroud)