如何将List中的值写入文本文件?

时间:2012-10-09 18:43:08

标签: c#

我有这个功能:

private void button6_Click(object sender, EventArgs e)
{
    crawlLocaly1 = new CrawlLocaly();
    crawlLocaly1.StartPosition = FormStartPosition.CenterParent;
    DialogResult dr = crawlLocaly1.ShowDialog(this);
    if (dr == DialogResult.Cancel)
    {
        crawlLocaly1.Close();
    }
    else if (dr == DialogResult.OK)
    {
        //LocalyKeyWords.Add(crawlLocaly1.getText() + "," + mainUrl);
        if(LocalyKeyWords.ContainsKey(mainUrl)) 
        {
            LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());


        }
        else
        {
            LocalyKeyWords.Add(mainUrl, new List<string>(new string[]
            {
                crawlLocaly1.getText()
            }
            ));
        } 
        crawlLocaly1.Close();
    }
}

当用户向textBox输入内容并单击ok时,结果在LocalKeyWords中为Dictionary&gt;就像:

在索引0中,例如:http://www.google.com“,”google 谷歌是属于http://www.google.com

的关键

现在,如果用户在网址上输入一次关键字,则会转到第二部分,如果用户更改同一网址的密钥,则会转到第一部分,如果用户更改了网址,则会转到到第二部分。

第一次为网址添加密钥时,它会更新相同网址的密钥或为新网址添加新密钥。

所以列表应该是这样的:

index 0 http://www.google.com,google
index 1 http://www.microsoft.com,com

依旧...... 并且此功能正常工作我只需要将List添加到硬盘上的文本文件中。 所以在Form1级别我有一个streamwriter w = new streamwriter(@“d:\ test.txt”);

事实上,当我在List上使用断点时,我在左侧看到了url,然后我看到了其他不是关键字的东西:

 [0] = {[http://www.google.co.il, System.Collections.Generic.List`1[System.String]]}

它不是一个错误或者只是在断点上的东西,这就是我所看到的。而不是System.Collections.Generic.List`1 [System.String]我想看到关键字例如:google

如何将List值写入文本文件,以便文本文件格式如下:

0 http://www.google.com,google
1 http://www.microsoft.com,hello
2 http://www.cnet.com,Daniel

0 1 2显示索引,url显示mainUrl,右sie显示Keys(用户输入的关键字)。

然后如何将文本文件中的值读回lixtBox? 因此,当我在构造函数中运行程序时,它将读取文本文件并以listBox格式显示:

url: http://www.google.com --- keword: google
url: http://www.microsoft.com --- keword: hello
url: http://www.cnet.com --- keword: Daniel

因此在listBox中,用户会在文本文件中看到它更好。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用这个简单的代码将文本文件写入您的值:

        int count = 0;
        foreach(KeyValuePair<string, string> kvp in LocalyKeyWords)
        {
            w.WriteLine(count.ToString() + " " + kvp.Key + " " + kvp.Value);
            count++;
        }
        w.Close();

此外,您可以使用以下代码读取该文本文件,我必须警告您,它不会检查您是否在文本文件中将所有三个字符串分隔为空白字符。此外,如果您存储的文本包含空白字符,则应将文件中的字符串与某些特殊字符分开。

        TextReader r = new StreamReader(@"d:\test.txt");
        string line = string.Empty;
        while ((line = r.ReadLine()) != null)
        {
            string[] data = line.Split(new char[] { ' ' },  StringSplitOptions.RemoveEmptyEntries);
            ListViewItem lvi = new ListViewItem("url: " + data[1] + " " + data[2]);
            listView1.Items.Add(lvi);
        }

答案 1 :(得分:0)

调试器告诉你的是准确的。您正在向集合添加字符串列表而不是字符串,这就是调试器向您显示列表而不是字符串的原因。认为这些工具是错误的,这是一个新手的错误。

LocalyKeyWords.Add(mainUrl, new List<string>(new string[] 

顺便说一句,该语句甚至在语法上都不正确 - 你的结束括号丢失了。