读取、覆盖和显示文本文件的问题
本文关键字:文件 问题 文本 显示 覆盖 读取 | 更新日期: 2023-09-27 18:06:44
我在读取txt文件时遇到了一些问题。我的项目。这是一种游戏,可以记录高分,显示和重置分数。问题是,如果我重置高分(通过ToolStripMenuItem从主表单),高分表单停止更新。
例如,一步一步的方法:
- 打开应用程序(通过调试器)(我提到。txt是干净的)
- 玩游戏,记录高分
- 查看高分表格,我的高分在那里
- 重置高分
再次打开hilicore表单,我的hilicore仍然在那里。(但它是从。txt文件中清除的,因为如果我重新打开游戏并打开再次显示高分表,它是干净的)
如果我按照1-2-3 -3这样做,当我看到高分表格时,它是干净的。
部分代码:重置按钮的工作原理如下:
private void resetToolStripMenuItem1_Click(object sender, EventArgs e)
{
DialogResult reset = MessageBox.Show("Are you sure you want to reset the highscores?", "Reset highscores", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
if (reset == DialogResult.OK)
{
File.WriteAllText("highscores.txt", string.Empty);
MessageBox.Show("Successfully reset highscores");
}
}
hilicores form_load是这样的:
StreamReader inputFile = File.OpenText("highscores.txt");
easy = 0; med = 0; hard = 0;
while ((x = inputFile.ReadLine()) != null)
{
string[] words = x.Split('*');
m = 0;
foreach (string s in words)
{
// here comes some code which keeps one highscore in memory
}
// here is that one highscore sorted by difficulty
}
inputFile.Close();
//here are the highscores sorted
我没有写所有的代码,因为它太长了,我相信,无关紧要。以下是文本中高分的书写:(当完成游戏时,出现一个带有文本框和按钮的新表单,这是代码:)
if (DialogResult == DialogResult.OK)
{
while (ok == 0)
{
string s = textBox1.Text;
ok = 1;
for (int i = 0; i < s.Length; i++)
{
if (s[i] == '*') ok = 0;
}
if (ok == 0)
{
MessageBox.Show("Your name must not contain the '*' character");
textBox1.Text = "";
}
}
StreamWriter outputFile = File.AppendText("highscores.txt");
outputFile.WriteLine(Form1.dificultate + "*" + Form1.secunde.ToString() + "*" + Form1.moves + "*" + textBox1.Text);
outputFile.Close();
}
您可以将事件OnVisibleChanged
添加到表单中(此处为文档),并在其中加载高分文件。
为了避免每次显示hilicore表单时都重新加载高分列表(如果这是一个问题),您可以在重置高分列表时设置一个全局标志,该标志可以决定是否重新加载文件。
正如@Hans Passant所说,问题是当txt为空时for(;;)循环没有运行。(重置后).
while ((x = inputFile.ReadLine()) != null)
{
c++;
//reading and keeping in memory the highscores
}
if(c==0) //make all the highscore labels empty, skip sorting the highscores