2015-02-09 43 views
0

我正在制作游戏扫雷并且我正在尝试实施一项highscores功能。我试图将3个不同的文件(每个文件都包含3个难度设置中的每一个的高分)加载到3个不同的richTextBox中。当我运行该应用程序并单击菜单条上的“高分”选项卡时,它将首次运行。但是,如果我玩游戏,然后尝试访问高分形成我得到一个异常错误 -加载多个文件异常错误C#

型“System.IO.IOException”的未处理的异常出现在mscorlib.dll的

附加信息:该进程无法访问该文件 'C:\用户\ jzcon_000 \复制\的Visual Studio的 \项目\分配1 \分配1 \ BIN \调试\ highScoresMed.txt',因为它正被另一个进程使用

这是w这里的调用时

private void highScoresToolStripMenuItem_Click(object sender, EventArgs e) 
    { 

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

这是我HighSc类中的方法

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

继承人的保存高分类

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

    } 
} 

}

+2

不知道为什么downvotes。这是一个有效的,合理的问题,虽然这是一个非常明显的作业问题,但它的措辞比大多数都好,并且实际上有相关代码... – user2366842 2015-02-09 20:39:45

回答

1

所以当你有难度级别设置为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以确保也在例外的情况下,流被正确配置

+0

伟大的工作现在!我是新来的C#所以感谢帮助。 – 2015-02-09 20:58:02