读取,覆盖和显示txt文件的问题C#

时间:2014-06-05 07:44:42

标签: c# winforms

我从txt文件中读取时遇到了一些问题。我的项目。它是一种游戏,能够记录高分,显示它们并重置它们。 问题是,如果我重置高分(通过主窗体中的ToolStripMenuItem),则高分形式将停止更新。

例如,一步一步的方法:

  
      
  1. 打开应用程序(通过调试器)(我提到.txt是干净的)
  2.   
  3. 玩游戏,记录高分
  4.   
  5. 查看高分榜,我的高分是
  6.   
  7. 重置高分
  8.   
  9. 再次打开高分榜,我的高分仍然存在。 (但是它会从.txt文件中清除,因为如果我重新打开游戏并打开它   de highscore再次形成,它很干净)
  10.   

如果我执行1-2-4-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");
        }
    }

highscores 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

我没有编写所有代码,因为它太长了,我相信,无关紧要。 以下是txt中高分的写作:(在完成游戏时,会出现一个带有文本框和按钮的新表单,这里是代码:)

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();

        }

2 个答案:

答案 0 :(得分:0)

您可以将事件OnVisibleChanged添加到表单(文档here),然后在其中加载高分文件。

为避免每次显示高分表单时重新加载高分列表(如果这是一个问题),您可以在重置高分列表时设置全局标志,此标志可以决定是否重新加载该文件。 / p>

答案 1 :(得分:0)

正如@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