我已经掌握了将所有输入保存到文本文件的重点,但现在我想创建另一个功能,我可以更新该文件,但只能通过表单本身
after()
所以在这里它将所有输入和值作为字符串保存到blah.txt文件中,我现在如何从文件中检索所有信息并更新它?
答案 0 :(得分:1)
您可以使用ReadAllText功能阅读文本文件的全部内容。此外,您可以压缩文本结构:
String ticketText = String.Format(@"
===================================[Receipt]====================================
|Title: {0}
|Surname: {1}
|Forname: {2}
...
...
", comboBox.Text, textBox1.Text, textBox2.Text, ...);
saveText.Write(ticketText);
这种构建文本的方式更好,因为一切都是一次完成的,而且更容易阅读。使用interpolated strings时,这将更加轻松。
我还建议根据其含义命名控件:例如: txtTitle
的{{1}}或TitleText
。
答案 1 :(得分:1)
在您的代码中,您使用两种不同的方法在一个进程中写入文件。您使用StreamWriter
保存收据。然后静态File.AppendAllText
附加一个空行。没必要那样做。我认为最好在单独的方法中生成消息,然后使用静态File.AppendAllText
一次性保存所有内容:
private string GetReceipt()
{
StringBuilder receiptBuilder = new StringBuilder();
receiptBuilder.AppendLine("===================================[Receipt]===================================");
receiptBuilder.AppendLine("|Title:" + " " + comboBox.Text);
receiptBuilder.AppendLine("|Surname:" + " " + textBox1.Text);
receiptBuilder.AppendLine("|Forname:" + " " + textBox2.Text);
receiptBuilder.AppendLine("|Passanger[s]:" + " " + textBox6.Text);
receiptBuilder.AppendLine("|Group:" + " " + checkBox.IsChecked + " " + "No: " + textBox4.Text);
receiptBuilder.AppendLine("|Class:" + " " + comboBox1.Text);
receiptBuilder.AppendLine("|Luggage:" + " " + textBox7.Text);
receiptBuilder.AppendLine("|Suitcase:" + " " + checkBox1.IsChecked + " " + "No: " + textBox5.Text);
receiptBuilder.AppendLine("|Departure On:" + " " + DatePicker.Text + " " + "At:" + " " + comboBox2.Text);
receiptBuilder.AppendLine("|Destination From:" + " " + lb + " " + "To:" + " " + lb1);
receiptBuilder.AppendLine("===================================[Receipt]===================================");
receiptBuilder.AppendLine();
return receiptBuilder.ToString();
}
然后保存到文件:
File.AppendAllText(filePath, GetReceipt());
通过这种小型重构,您现在可以轻松实现请求的第一部分:更新现有文件。
当您需要使用新数据更新文件时,您只需调用GetReceipt()
并附加结果。
或者,如果您需要删除旧文件,则可以使用WriteAllText
代替:
File.WriteAllText(filePath, GetReceipt());
现在读取文件。取决于你的需要。如果您只是阅读文本并将其显示在文本框中,那么它相当容易。只需使用ReadAllText
myTextBox.Text = File.ReadAllText(filePath);
但是,如果要在适当的组合框和文本框中显示它,则必须手动读取该文件。但如果情况确实如此,那么我建议您稍微重构一下代码:
创建一个包含收据所有信息的类。每次要保存数据时,都要创建此类的新实例,然后将其序列化(或保存到数据库),以便检索特定字段。如果您仍希望有一种很好的方式来显示收据,则可以覆盖ToString
方法。