我正在尝试使用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。
答案 0 :(得分: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的一种方便方法,它可以免费关闭流(你仍然需要捕获异常)。