试图将所选的comboBox和textBox文本保存到文本文件。 但是有多个值被保存。
为避免混淆,将它们系统地保存在文本文件的特定行中将有助于识别这些值。
尝试使用以下方法,但应用程序挂起。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApp1
{
public partial class Setups : Form
{
public Setups()
{
InitializeComponent();
//this.TopMost = true;
//this.FormBorderStyle = FormBorderStyle.None;
//this.WindowState = FormWindowState.Maximized;
}
private void textBox8_TextChanged(object sender, EventArgs e)
{
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
static void lineChanger(string newText, string fileName, int line_to_edit)
{
string[] arrLine = File.ReadAllLines(fileName);
arrLine[line_to_edit - 1] = newText;
File.WriteAllLines(fileName, arrLine);
}
public void button5_Click(object sender, EventArgs e)
{
lineChanger(string.Format("{0} | {1}", comboBox1.Text, textBox8.Text), "sample.txt", 30); //
// Succesfully wrote to file on first line
//StreamWriter sw = new StreamWriter("Test.txt");
//sw.WriteLine($"{comboBox1.Text}.{textBox8.Text}");
//sw.Close();
}
答案 0 :(得分:0)
更好的解决方案是创建一个具有所有设置的类,然后使用JSON对其进行序列化/反序列化。
使用nuget将JSON包添加到您的应用程序。序列化的示例代码:https://www.newtonsoft.com/json/help/html/SerializingJSON.htm
答案 1 :(得分:0)
挂起的应用程序和超出范围的异常是两件不同的事情。如果您需要帮助,请在问题中进行精确说明。
此外,如果在单击按钮5时读取的文件还不包含至少30行,您的lineChanger
函数将显然失败。
像这样的硬编码数字在生产代码中总是一个坏主意。如果在某个时候修改了文件内容,将很难确保代码中的所有内容都已正确修复。
如果您真的想使用这样的文本文件,那么至少:
但是,正如另一个答案中所提到的,最好使用其他格式,例如JSON。除二进制数据外,几乎所有其他格式都比文本文件更可取(假设内容是应用程序的设置)。
话虽如此,如果您真的想要lineChanger
,则应该添加一个这样的测试:
if (line_to_edit >= arrLine.Length)
{
List<string> list(arrLine);
while (List.Length < line_to_edit) { list.Add(string.Empty); }
list.Add(newText);
arrLine = list.ToArray();
}
else { … old code from question… }
但是,如果您从文件中读取其他行或经常读取行,则每次修改一行时打开/读取/更新/写入/关闭文件可能会变得非常慢。最好有一个类来管理设置,以便在打开对话框时和在关闭对话框时一次加载它们(假设对话框显示的时间相对较短,这并不重要)的另一个原因是以立即保存更改。)
答案 2 :(得分:0)
我认为您的问题范围太广,需要更多详细信息。
您需要考虑将表格与数据分开。创建一个数据类以保存要存储或读取的值,并使UI使用数据绑定与此类进行交互。这样,您的数据类将始终包含最新的信息。
在需要时,可以使用TextStream
,BinaryFormatter
,XmlSerializer
或JSON
来序列化数据文件,这取决于是否需要其他程序或其他程序访问数据。位置。您甚至可以使用内置的Settings
在应用程序退出之前保存数据,并在应用程序再次启动时将其读回。
因此,请编辑问题以阐明您要使用此数据的内容,并添加一个整体示例的示例(现在,文本文件中的所有行)。然后我们可以更具体地回答。