我正在尝试编写一个程序对我来说应该比它证明的要容易得多。
我有一个带有文本框的表单,要求用户输入他们的详细信息,例如姓名、地址等。我试图实现的是当用户点击保存按钮时将文本框中的数据保存到.txt文件中。
我可以创建文件,但数据不会保存到文件中。我在下面发布了我的代码,如果您有任何帮助,我们将不胜感激。
private void btnSave_Click(object sender, EventArgs e)
{
string file_name = "e:\test1.txt";
System.IO.StreamWriter objWriter;
objWriter = new System.IO.StreamWriter(file_name, true);
objWriter.Write(txtName.Text);
objWriter.Write(txtAddress.Text);
objWriter.Write(txtEmail.Text);
objWriter.Write(txtPhone.Text);
MessageBox.Show("Details have been saved");
}
StreamWriter存在的代码行的开头使用using
会更实用。这是为了确保数据Disposed
,您将需要它来解锁流中的数据。
写入数据时:
using (StreamWriter objWriter = new StreamWriter("test1.txt"))
{
objWriter.Write(txtName.Text);
objWriter.Write(txtAddress.Text);
objWriter.Write(txtEmail.Text);
objWriter.Write(txtPhone.Text);
MessageBox.Show("Details have been saved");
}
读取保存的数据时,让我们使用列表框来举例:
foreach (var line in File.ReadAllLines("test1.txt"))
{
listBox1.Items.Add(line);
}
希望这有帮助!
实现IDisposable
的局部变量包装到 using
语句中是一种很好的做法:
using (StreamWriter objWriter = new StreamWriter(file_name, true))
{
objWriter.Write(txtName.Text);
objWriter.Write(txtAddress.Text);
objWriter.Write(txtEmail.Text);
objWriter.Write(txtPhone.Text);
}
这也有一个积极的副作用:流在执行 using
语句后立即被刷新并关闭。
建议:考虑使用 WriteLine
而不是 Write
,因为可能需要字符串值之间的分隔符。
完成后调用StreamWriter.Flush
方法:
objWriter.Flush();
清除当前编写器的所有缓冲区,并使任何缓冲数据写入基础流。
您也可以使用File.WriteAllText
方法执行此操作:
var line = string.Join(" ", txtName.Text, txtAddress.Text, txtEmail.Text,txtPhone.Text);
File.WriteAllText(file_name, line);