在StreamWriter中设置,true是不好的,因为它会在每个旧网址或密钥中添加一个新行,此代码中的想法是用户可以输入切换到旧网址并更新网址密钥。如果我将StreamWriter设置为,则即使它是旧的URL和密钥,它也会添加到新行。
代码:
private void button6_Click(object sender, EventArgs e)
{
if (File.Exists(@"d:\Keywords.txt"))
{
var LocalyKeyWords = File.ReadAllLines(@"D:\Keywords.txt")
.Select(entry =>
{
var values = entry.Split(',');
return new
{
key = values.First(),
values = values.Skip(1).ToList(),
};
}).ToDictionary(kv => kv.key, kv => kv.values);
}
using (var w = new StreamWriter(@"D:\Keywords.txt"))
{
crawlLocaly1 = new CrawlLocaly();
crawlLocaly1.StartPosition = FormStartPosition.CenterParent;
DialogResult dr = crawlLocaly1.ShowDialog(this);
if (dr == DialogResult.OK)
{
if (LocalyKeyWords.ContainsKey(mainUrl))
{
LocalyKeyWords[mainUrl].Clear();
//probably you could skip this part and create new List everytime
LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());
}
else
{
LocalyKeyWords[mainUrl] = new List<string>();
LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());
}
foreach (KeyValuePair<string, List<string>> kvp in LocalyKeyWords)
{
w.WriteLine(kvp.Key + "," + string.Join(",", kvp.Value));
}
}
}
LocalyKeyWords列表是:
Dictionary<string, List<string>> LocalyKeyWords = new Dictionary<string, List<string>>();
由于List是字典,这就是我不想使用的原因,所以在这里:using (var w = new StreamWriter(@"D:\Keywords.txt"))
使用Dictionary的想法是将List格式化为:Url,Key http://www.google.com “” 谷歌
http://www.google.com是网址,谷歌是网址的关键 现在,如果程序中的用户继续为此URL添加新密钥,那么在文本文件中它将用新密钥替换旧密钥。如果用户放置一个新网址并为其添加新密钥,则会将其添加到新行中,但如果用户将返回http://www.google.com并更改新密钥,则会替换旧密钥。 / p>
Ghats为什么这样做,在StreamWriter中是真的不是很好的解决方案。
问题是,当我关闭程序并再次运行它并单击此按钮时,它会创建一个新的空文本文件。 只有当我关闭程序并再次运行它并单击按钮时。
mainUrl是用户添加新网址或更改为旧网址的网址。 而且:
crawlLocaly1.getText();
是一个带有textBox的新表单,用户可以在其中输入/更改当前mainUrl的新键。
(添加“,”因为我无法发布http://www.google.com“,”谷歌“链接
这是文件格式化的示例:
http://www.google.com","google
http://www.cnet.com,cnet
所以问题是当我关闭程序时再次运行它并单击按钮创建一个新的文本文件。