读取、覆盖和显示文本文件的问题

本文关键字:文件 问题 文本 显示 覆盖 读取 | 更新日期: 2023-09-27 18:06:44

我在读取txt文件时遇到了一些问题。我的项目。这是一种游戏,可以记录高分,显示和重置分数。问题是,如果我重置高分(通过ToolStripMenuItem从主表单),高分表单停止更新。

例如,一步一步的方法:

  1. 打开应用程序(通过调试器)(我提到。txt是干净的)
  2. 玩游戏,记录高分
  3. 查看高分表格,我的高分在那里
  4. 重置高分
  5. 再次打开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