我有一个用 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 块中并丢弃异常来克服这个问题,一切正常,但如果我可以这么说的话,它似乎有点“脏”。我应该怎么办 ?也许并且 if(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)
{ }