我已经将保存部分放下了,我知道它有效,但是当我点击加载按钮时,它不会显示我从转到speak.txt文件的文本框中保存的任何内容
using System;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Grades : Form
{
private StreamWriter fil;
public Grades()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
fil = new StreamWriter("saying.txt"); //This is the txt file
}
catch (DirectoryNotFoundException exc)
{
lstBxDisplay.Text = "Nothing " +
exc.Message;
}
catch (System.IO.IOException exc)
{
lstBxDisplay.Text = exc.Message;
}
}
// saving the files to the saying.txt
private void btnSaveAs_Click(object sender, EventArgs e)
{
try
{
fil.WriteLine(txtBxLastName.Text);
txtBxLastName.Text = "";
txtBxLastName.Focus();
}
catch (System.IO.IOException exc)
{
lstBxDisplay.Text = exc.Message;
}
}
// next is the load button to load the files into the list/display box
private void btnLoad_Click(object sender, EventArgs e)
{
string inValue;
try
{
using (StreamReader infil =
new StreamReader("saying.txt"))
{
inValue = infil.ReadLine();
while (inValue != null)
{
inValue = infil.ReadLine();
if (inValue != null)
this.lstBxDisplay.Items.Add(inValue);
} // end of while
} // end of using
}
catch (System.IO.IOException exc)
{
lstBxDisplay.Text = exc.Message;
}
}
private void Grades_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
fil.Close();
}
catch
{
}
}
}
}
没有加载到列表框中的任何原因?我已经尝试了标签和文本框来显示消息,但它们都不起作用。我调试了程序并且执行正常
答案 0 :(得分:0)
这里有多个问题,但我会指出两个可以让您的代码正常工作的主要问题。
fil.Close();
方法结束时致电btnSaveAs_Click
。这是保存应该如何阅读。
fil.WriteLine(txtBxLastName.Text);
txtBxLastName.Text = "";
txtBxLastName.Focus();
fil.Close();
infil.ReadLine();
,然后在将其添加到列表框之前再次调用它。您需要移动第二个ReadLine()
。如果您只是在文件中写入一行,则现有代码将跳过第一行并尝试再次读取该行,该行将为空(无第二行)。因此,它永远不会在您的列表框中添加任何内容。这是读取的顺序。
using (StreamReader infil = new StreamReader("saying.txt"))
{
inValue = infil.ReadLine();
while (inValue != null)
{
this.lstBxDisplay.Items.Add(inValue);
inValue = infil.ReadLine();
} // end of while
} // end of using
这些改变会让你工作。现在要指出的是,你正在阅读和写入一个错误的文件。您不应该在表单加载中打开流并等待按钮单击以从该流写入/读取。 除非你有充分的理由去做你正在做的事情,否则你应该打开你的流,执行读/写操作,并立即关闭你的流。对于一个简单的文件IO,我甚至建议使用不同的机制。查看MSDN for the System.IO.File Class以获取更简单的方法来读取行或将行写入文件。