private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
string txt = "";
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Text File|*.txt";
ofd.FileName = "File";
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
StreamReader sr = new StreamReader(File.OpenRead(ofd.FileName));
while (txt != null) {
txt += sr.ReadLine() + "\n";
if (txt != null) richTextBox1.Text += txt;
else sr.Dispose();
}
}
}
这是我的代码,用于在单击菜单条项目时运行。但不知何故,这会让我的应用程序陷入困境。代码中的错误是什么?
答案 0 :(得分:2)
你附加到txt所以它永远不能为空尝试
string line;
while ((line = sr.ReadLine()) != null)
{
txt += line + "\n";
if (txt != null) richTextBox1.Text += txt;
else sr.Dispose(); // Remove after seeing below
}
此外,您应该始终处理您的streamreader,以便像这样包装您的while循环(也替换streamreader行)
using(StreamReader sr = new StreamReader(File.OpenRead(ofd.FileName)))
{
//While loop here
}
答案 1 :(得分:0)
代码中的即时错误是在循环条件中:
while (txt != null)
由于txt不为null,因此您的应用程序会陷入无限循环。 还有其他一些问题:
因此,如果您想逐行读取文件到RichEdit,您可以这样做 像那样
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Text File|*.txt";
ofd.FileName = "File";
StringBuilder Sb = new StringBuilder();
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
using (StreamReader sr = new StreamReader(File.OpenRead(ofd.FileName))) {
while (!sr.EndOfStream)
if (Sb.Length > 0) {
Sb.AppendLine();
Sb.Append(sr.ReadLine());
}
else
Sb.Append(sr.ReadLine());
}
richTextBox1.Text += Sb.ToString();
}