1

我正在尝试使用 Stream Writer 写入特定的行部分,这是我目前所拥有的:

异常消息给了我:索引超出了数组的范围。

private void WriteData(string playerName)
    {
        StreamWriter nameWriter = null;
        StringBuilder sb = new StringBuilder();

        try
        {
            string line = "";
            string namePartOne = line.Split(DELIMITER)[0];
            string namePartTwo = line.Split(DELIMITER)[1];
            if (namePartOne != EMPTY)
            {
                namePartTwo = playerName;
                string[] gameState = { namePartOne, namePartTwo, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY };
                sb.Append(gameState);
                nameWriter.WriteLine(String.Join(",", gameState));
            }
            else
            {
                nameWriter = new StreamWriter(filepath, true);
                string[] gameState = { playerName, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY };
               
                nameWriter.WriteLine(String.Join(",", gameState));
            }
        }
        catch (Exception ex)
        {
            txtTextBox2.Text = "The following problem ocurred when writing to the file:\n"
               + ex.Message;
        }
        finally
        {
            // Closing the StreamWriter should close it 
            // AND its underlying FileStream
            if (nameWriter != null)
                nameWriter.Close();
        }
    }

我试图把它放到我的文本文件中:

playerOneName, playerTwoName, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY 

基本上,这个作家习惯于从他的浏览器中写出玩家二的名字,并从另一个浏览器/标签中写出玩家二的名字。我首先要检查玩家的名字是否写在第一个字段中,如果是,我会在第二个字段中写第二个玩家。其他字段留空以描述游戏运行时的游戏状态。

我可能有逻辑问题,如果你看到任何问题,请指出。我可以使用正则表达式来比较和验证我的球员在场吗?

我需要先流式读取此文件,然后才能流式写入文件,对吗?

我正在使用 APS.NET 网站和表单运行 Visual Studio '08。

谢谢你的时间

4

1 回答 1

2
string line = "";
string namePartOne = line.Split(DELIMITER)[0];
string namePartTwo = line.Split(DELIMITER)[1];

这将导致索引越界错误,因为您正在拆分一个空字符串(这将返回一项),然后尝试访问该一项列表的第二项。

另外,我可以建议而不是使用StringBuilder,只是做

String.Join(",", gameState);

创建您的输出字符串。

这是一个可能的整体解决方案(对任何错误表示歉意,因为我手头没有编译器):

List<String> gameState;
using (var reader = new StreamReader(filename))
    gameState = reader.ReadLine().Split(new[] {','});

if (gameState[0] == "")
    gameState[0] = playerName
else
    gameState[1] = playerName;

using (var writer = new StreamWriter(filename))
    writer.WriteLine(String.Join(",", gameState));

注意:'using' 是获得 try/finally 的一种方便方法,它可以免费关闭流(尽管您仍然必须捕获异常)。

于 2012-04-14T19:21:34.300 回答