这个问题包含了我在C#中遇到的两个问题(很可能是相互关联的)。我真的希望在其他地方没有明确的答案,因为我不确定使用什么搜索条款,到目前为止还没有遇到任何令我满意地解释它的内容。我的C#文字游戏中有一个名为isHighScore()
的函数。基本上发生的事情是,无论我尝试格式化的方式不同,删除使用,try / catch,我似乎无法将变量写入文件。我已经为第一次阅读此内容的人大大编辑了代码,以便说明(对我来说)更多的范围问题。
private void isHighScore() //Having problems...
{
string strHighScore;
try
{
StreamReader readHighScore = new StreamReader(strPath + "WAHS.txt")
strHighScore = readHighScore.ReadLine();
}
catch (Exception e)
{
MessageBox.Show(Convert.ToString(e.Message));
}
...
接下来我会使用StreamWriter插入一个类似的块,而我对userScore的比较大于strHighScore似乎没有评估为真。是因为我的变量超出了范围吗?如何读取try-catch范围之外的更改值,或者就此而言,使用StreamReader(我知道这是首选方法)的using语句。
答案 0 :(得分:4)
我强烈建议您完全摆脱对Close
的手动调用。请改用using
语句。事实上,如果您使用StreamReader
提供的便捷方法,则根本不需要File
:
string fileName = Path.Combine(path, "WAHS.txt");
string highScoreLine = File.ReadLines(fileName).First();
string beforeSpace = highScoreLine.Split(" ")[0];
int highScore = int.Parse(beforeSpace);
int userScore = int.Parse(txtScore.Text);
if (userScore > highScore)
{
MessageBox.Show("Congratulations! You set a new high score!", "High Score");
File.WriteAllText(fileName, userScore.ToString());
}
上述代码抛出的任何异常都应该被捕获并在其他地方处理,在堆栈的上方。
(请注意,您的当前代码只会将现有的高分写回文件,而不是新文件。)
如果您确信该文件仅 包含该行文字,则可以改为使用File.ReadAllText
。
解决混乱背后的根本问题可能更为重要。您是否理解为什么在您尝试关闭的地方无法访问readHighScore
?
答案 1 :(得分:0)