我从txt文件中读取时遇到了一些问题。我的项目。它是一种游戏,能够记录高分,显示它们并重置它们。 问题是,如果我重置高分(通过主窗体中的ToolStripMenuItem),则高分形式将停止更新。
例如,一步一步的方法:
- 打开应用程序(通过调试器)(我提到.txt是干净的)
- 玩游戏,记录高分
- 查看高分榜,我的高分是
- 重置高分
- 再次打开高分榜,我的高分仍然存在。 (但是它会从.txt文件中清除,因为如果我重新打开游戏并打开它 de highscore再次形成,它很干净)
醇>
如果我执行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();
}
答案 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