在同一功能中使用streamreader和streamwriter时的范围问题

时间:2012-11-16 17:52:22

标签: c# scope streamreader streamwriter

这个问题包含了我在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语句。

2 个答案:

答案 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)

关于范围

Try-catch创建范围..

例如

try
{
int x=100;
}

catch
{
}
x=55;//you cant access x here

但是,这会起作用

int x=0;
try
{
x=100;
}
catch
{
}
x=55;//valid..

因此,FinallyCatch块无法访问Try块中声明的变量。

更多信息here

更多常规信息here