写在C#中的文本文件,但是有一个例外未处理的错误

问题描述 投票:0回答:1

我一直在做了一段时间测验现在,想实现一个领导委员会。领导董事会应显示用户名,得分

我检查,看它是否被承认的文件,当我删除了比分它工作正常。当我在标签上的所有其他形式显示它的分数工作正常。

公共部分类frmLeaderboard:表格{// enter code here安装球员名单的球员名单=新名单();

    public frmLeaderboard()
    {
         //Setup form
         InitializeComponent();
         dgLeaderboard.ColumnCount = 3;
         dgLeaderboard.Columns[0].Name = "Player Name";
         dgLeaderboard.Columns[1].Name = "Score"; 
         dgLeaderboard.Columns[2].Name = "Level";
         SaveScores();
         GetPreviousPlayers();
    }

    private void GetPreviousPlayers()
    {
        //searches for file and loads score
        if(File.Exists("previousplayers.txt"))
        {
            LoadScores();
        }

        dgLeaderboard.Sort(dgLeaderboard.Columns[1], ListSortDirection.Descending);
    }

    private void LoadScores()
    {
        if (File.Exists("previousplayers.txt"))
        {
            //Loads the score
            var playerScores = File.ReadAllLines("previousplayers.txt");

            if (playerScores.Length > 0)
            {
                //bring in the players to the grid
                foreach (var players in playerScores)
                {
                    var splitDetails = players.Split('~');
                    dgLeaderboard.Rows.Add(splitDetails[0], Convert.ToInt32(splitDetails[0]), splitDetails[2]);
                }
            }

            else
            {
                HideGrid();
            }
        }
    }

    private void SaveScores()
    {
        FileStream fileStream = new FileStream("previousplayers.txt", FileMode.Append, FileAccess.Write);
        StreamWriter streamWriter = new StreamWriter(fileStream);

        //Seperate the username, score and level
        try
        {
            foreach(var player in players)
            {
                streamWriter.WriteLine(player.Username + "~" + player.Score + "~" + player.Level);
            }
        }
        catch(Exception)
        {
            MessageBox.Show("Error Loading the scores", "Please try again");
        }
        finally
        {
            streamWriter.Close();
            fileStream.Close();
        }

    }

    private void HideGrid()
    {
        //Sets the grid to invisible
        dgLeaderboard.Visible = false;
    }



}

在表格之前,我用这个代码

string filePath = "previousplayers.txt";
        FileStream aFile;
        StreamWriter sw;

        try
        {`enter code here`
            if (!File.Exists(filePath))
            {
                aFile = new FileStream(filePath, FileMode.Create, FileAccess.Write);
            }
            else
            {
                aFile = new FileStream(filePath, FileMode.Append, FileAccess.Write);
            }

            sw = new StreamWriter(aFile);
            sw.WriteLine(frmStart.Player.Username + "~" + frmStart.Player.Score + "~" + frmStart.Player.Level);
            sw.Close();
            aFile.Close();

        }
        catch (Exception ex)
        {
            MessageBox.Show("User's details have not been saved", "Error Occurred");
        }

崩溃,错误:异常未处理,System.IndexOutOfRangeException:“指数阵列的边界之外。”

在该行dgLeaderboard.Rows.Add(splitDetails [0],Convert.ToInt32(splitDetails [0]),splitDetails [2]);

大段引用

c# winforms datagrid
1个回答
1
投票

你写的玩家分数是这样的:

player.Username + "~" + player.Score + player.Level

所以,如果你读它,并在~拆分它,你会得到一个长度为2,[0]是player.Username和[1]是player.Score + player.level数组。你试图访问索引[2],这是出界。

© www.soinside.com 2019 - 2024. All rights reserved.