加载多个文件异常错误 C#

Loading multiple files Exception error C#

我正在制作扫雷游戏,我正在尝试实现高分功能。我正在尝试将 3 个不同的文件(每个文件都持有 3 个难度设置中的每一个的高分)加载到 3 个不同的 richTextBox 中。当我 运行 应用程序并单击菜单条中的 'high scores' 选项卡时,它第一次运行。但是,如果我玩游戏然后尝试访问高分表,我会收到异常错误 -

An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll

Additional information: The process cannot access the file 'C:\Users\jzcon_000\Copy\Visual Studio\Projects\Assignment1\Assignment1\bin\Debug\highScoresMed.txt' because it is being used by another process

这是调用的地方

    private void highScoresToolStripMenuItem_Click(object sender, EventArgs e)
    {

        Minesweeper.HighSc highScore = new Minesweeper.HighSc();
        highScore.read();
        highScore.Show();   
    }

这是我HighSc中的方法class

    public void read()
    {
        StreamReader readerE = File.OpenText("highScoresEasy.txt");
        StreamReader readerM = File.OpenText("highScoresMed.txt");
        StreamReader readerH = File.OpenText("highScoresHard.txt");

        if (readerE != null)
        {
            string readEasy = File.ReadAllText("highScoresEasy.txt");
            richTextBox1.Text = readEasy;
        }
        readerE.Close();

        if (readerM != null)
        {
            string readMed = File.ReadAllText("highScoresMed.txt");
            richTextBox2.Text = readMed;
        }
        readerM.Close();

        if (readerH != null)
        {
            string readHard = File.ReadAllText("highScoresHard.txt");
            richTextBox3.Text = readHard;
        }
        readerH.Close();
    }

这是保存高分class

namespace Minesweeper
{
 class Save
 {
    int diff, hr, min, sec;
    string player;

    public Save(int difficulty, int hour, int minute, int second, string playerN)
    {
        diff = difficulty;
        hr = hour;
        min = minute;
        sec = second;
        player = playerN;
    }

    public void save()
    {
        StreamWriter writerEasy = new StreamWriter("highScoresEasy.txt", true);
        StreamWriter writerMed = new StreamWriter("highScoresMed.txt", true);
        StreamWriter writerHard = new StreamWriter("highScoresHard.txt", true);

        if (diff == 1)
        {
            writerEasy.WriteLine("Time: " + hr + ":" + min + ":" + sec + " " + "Name: " + player);
            writerEasy.Close();
        }
        else if (diff == 2)
        {
            writerMed.WriteLine("Time: " + hr + ":" + min + ":" + sec + " " + "Name: " + player);
            writerMed.Close();
        }
        else if (diff == 3)
        {
            writerHard.WriteLine("Time: " + hr + ":" + min + ":" + sec + " " + "Name: " + player);
            writerHard.Close();
        }

    }
}

}

因此,当您将难度级别设置为 1 然后保存时,您会同时打开 level2 和 level3 的 StreamWriters,但永远不要关闭它们。

这只能意味着当您尝试加载这两个级别的高分时,您会发现您的文件被您之前的保存锁定了。

您应该更改保存方法以仅打开所需的文件

public void save()
{
    if (diff == 1)
    {
        using(StreamWriter writerEasy = new StreamWriter("highScoresEasy.txt", true))
        {
            writerEasy.WriteLine("Time: " + hr + ":" + min + ":" + sec + " " + "Name: " + player);
        }
    }
    else if (diff == 2)
    ....
    else if (diff == 3)
    ....

我还建议在您的阅读方法中使用 using statement 以确保在出现异常的情况下正确处理流