private void button6_Click(object sender, EventArgs e)
{
string[] entries = File.ReadAllLines(@"D:\Keywords.txt");
foreach (string entry in entries)
{
string[] values = entry.Split(',');
LocalyKeyWords[values[0]].Clear();
for (int i = 1; i < values.Length; i++)
LocalyKeyWords[values[0]].Add(values[i]);
}
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[values[0]].Clear();
エラーは次のとおりです。KeyNotFoundException: The given key was not present in the dictionary
LocalyKeyWordsはリストです:
Dictionary<string, List<string>> LocalyKeyWords = new Dictionary<string, List<string>>();
そして、ファイルKeywords.txt
は今空ではありません:
http://www.cnet.com,changing for test
http://www.wlala.co.co,adding
それでも、ファイルを読み取ると、例外が発生します。LocalyKeyWords
0が空であるが、値に2つのインデックスが含まれているエラー行が表示されます。
[0] http://www.cnet.com and [1] changing for test
インデックス0はURLで、インデックス1はURLキーです。
この行の前に追加して、コードを次のように少し変更しようとしました。
if (LocalyKeyWords.Count == 0)
{
LocalyKeyWords[values[0]] = new List<string>();
}
else
{
LocalyKeyWords[values[0]].Clear();
}
しかし、それは機能せず、問題を解決しませんでした。まだ回線にエラーがあります。どうすれば修正できますか?
リストは次のように作成されます:url、key for exmaple:http ://www.google.com "、" googleまた、テキストファイル形式は次のようになります。
http://www.cnet.com,changing for test
http://www.wlala.co.co,adding
テスト用に変更することはhttp://www.cnet.comの鍵であり 、アドインはhttp://www.wlala.co.coの鍵です。
したがって、テキストファイルからurl、keyを読み戻すときに、2つのことを実行したいと思います。
URLとそれに属するキーをに追加する
ListBox
ために、コンストラクターでそれを行いました。ユーザーがURLのキーを変更するか、新しいURLとそのキーを追加するたびに、ボタンクリックイベントでこれを実行して、ユーザーがListBoxで変更をリアルタイムで確認できるようにします。コンストラクターで、URLとキーを追加し、次のようにリストボックスに表示します。sr = new StreamReader(@ "d:\ Keyboards.txt"); while(null!=(line = sr.ReadLine())){
index = line.IndexOf(","); key_of_each_line = line.Substring(0, index); value_of_each_key = line.Substring(index + 1); listBox1.Items.Add("Url: " + key_of_each_line + " --- " + "Key: " + value_of_each_key ); } sr.Close();
srはStreamReader
です。そして、それはコンストラクターでうまく機能しています。コンストラクターの同じ形式。ユーザーが新規追加/キー/秒またはURL/秒の変更時にボタンクリックイベントでリアルタイムに表示したい
- 読み取り部分を、例外エラーのあるボタンクリックイベントにあるように修正するには。
新しい読み取りパーツコード:
if (File.Exists(@"d:\Keywords.txt"))
{
string[] entries = File.ReadAllLines(@"D:\Keywords.txt");
foreach (string entry in entries)
{
string[] values = entry.Split(',');
if (LocalyKeyWords.ContainsKey(values[0]))
LocalyKeyWords[values[0]].Clear();
else
LocalyKeyWords[values[0]] = new List<string>();
for (int i = 1; i < values.Length; i++)
LocalyKeyWords[values[0]].Add(values[i]);
}
}
ユーザーがファイルを削除した場合に備えて、ファイルが存在するかどうかのチェックも追加されました。しかし、ファイルが存在する場合、ユーザーがボタンをクリックするたびに新しい空のテキストファイルが作成されることは望ましくありません。