背景:
1 个按钮 1 个需要写入的文件 1 个文本框 1 个 NumericUpDown
因此,在我的应用程序中,我需要写入一个包含多行的文件。输入来自一个 TextBox 和一个 NumericUpDown 控件,它包含一个通用格式的字符串string.Format("{0}|{1}", TextBoxInput, NumericUpDownInput);
。
我需要帮助实际上是在添加新行之前检查重复条目。基本上,如果用户决定输入他们已经拥有的东西(用更多的“时间”来更新它),程序应该检查新输入的输入是否与其中一行匹配,如果匹配,{1}
则应添加部分一起并替换原始值,同时保留{0}
部分。
我的方法:
我尝试解决此问题的方法是创建一个名为 string 的列表,newFile
并for loop
用于循环遍历,originalFile
以便查找新输入是否与已输入的匹配。
然后,两种可能的情况:a)如果是,只需替换数字输入部分并将其添加到 newFile,b)如果不是,只需将其添加到 newFile。
最后,我使用了 StreamWriter 以便用 newFile 覆盖 originalFile。
不幸的是,我遇到了很多麻烦,因为无论出于何种原因,我的方法都会生成一个空白文件。如果我只使用 StreamWriter 部分而不考虑重复条目,它实际上工作得很好。
还有件事儿; 如果程序还可以首先检查文件是否存在以避免异常,那就太好了。我已经做到了,但我认为这不是最好的方法。请帮帮我。先感谢您。
下面是按钮单击事件的代码,它基本上更新/添加到文件(毕竟这是您需要的唯一代码):
private void btnAdd_Click(object sender, EventArgs e)
{
// If input is either blank or invalid [-] (the input is verified through a database), show error message.
if (cardTitle == "" || cardTitle == "-")
MessageBox.Show("Correct any errors before trying to add a card to your Resources.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
// If the file does not exist, create it and close the stream object so as to further use the file.
if (!File.Exists("CardResources.ygodc"))
using (File.Create("CardResources.ygodc")) { };
string[] originalFile = File.ReadAllLines("CardResources.ygodc");
List<string> newFile = new List<string>();
for (int count = 0; count < originalFile.Length; count++)
{
string[] split = originalFile[count].Split('|');
string title = split[0];
string times = split[1];
if (title == cardTitle)
newFile[count].Replace(string.Format("{0}|{1}", title, times), string.Format("{0}|{1}", title, (nudTimes.Value + int.Parse(times)).ToString()));
else
newFile.Add(string.Format("{0}|{1}", cardTitle, nudTimes.Value.ToString()));
}
using (StreamWriter sw = new StreamWriter("CardResources.ygodc", true))
{
foreach (string line in newFile)
{
sw.WriteLine(line);
}
}
}
PS:对不起,如果我说得不够清楚,我不是以英语为母语的人。
编辑:如果您想知道cardTitle
代表什么,它基本上是来自 TextBox 的输入。
编辑2:我认为我的方法中的主要错误是我从一个空newFile
列表开始,而不是仅仅编辑originalFile
一个。你怎么看?