我有一個內置在C#中的WPF程序,它的一部分功能是填充兩個ListBox控件。在Window_Loaded事件中,程序調用Update()函數以填充ListBox,但它只執行該函數的一部分。如果在對文件進行追加操作後調用函數,該函數甚至會崩潰。該文件的結構如下:功能代碼的一部分不執行
content_for_first_listbox content_for_second_listbox
功能更新如下:
private void UpdateURL()
{
StreamReader rdr = new StreamReader("Links.db");
string line;
int dummy;
URL.Clear();
TAGS.Clear();
while ((line = rdr.ReadLine()) != null)
{
dummy = line.IndexOf(' ');
URL.Add(line.Substring(0, dummy));
TAGS.Add(line.Substring(dummy + 1));
}
rdr.Close();
LLinks.Items.Clear();
LTags.Items.Clear();
for (int a = 0; a < URL.Count; a++)
{
LLinks.Items.Add(new ListBoxItem().Content = URL[a]);
LTags.Items.Add(new ListBoxItem().Content = TAGS[a]);
}
}
,都會對第一循環之後執行,我發現了從調試。這裏是追加功能
private void LBookmarkBT_Click(object sender, RoutedEventArgs e)
{
StreamWriter wrt = new StreamWriter("Links.db", true);
wrt.Write("\n" + LURLTBox.Text + " " + LTagsTBox.Text);
wrt.Close();
UpdateURL();
}
任何想法?
更新:問題在於它正在讀取所有行並正確解析它們,但隨後會從無處讀取換行符,行字符串變爲「」,因此dummy = -1,並且它拋出一個長度異常。我設法通過將循環放入try-catch塊並拋棄異常來克服這一點,並且一切正常,但如果我可以這樣說的話,它似乎有點「髒」。我該怎麼辦 ?也許,如果(dummy == -1)不解析該行?
try
{
while ((line = rdr.ReadLine()) != null)
{
dummy = line.IndexOf(' ');
URL.Add(line.Substring(0, dummy));
TAGS.Add(line.Substring(dummy + 1));
}
}
catch (Exception e)
{ }
你單步執行了你的代碼嗎?我會說,也許你在前面遇到了\ n問題,也許ReadLine會給你一個空白的行,不能正確解析。 – Dave 2010-09-18 04:04:52
任何想法,任何人? – Andrew 2010-09-18 08:09:56