C# 如何格式化流编写器以写入文本文件?
文本文件用于描述web浏览器上游戏的状态。所以我需要格式化我的nameWriter.WriteLine,使其看起来像C# 如何格式化流编写器以写入文本文件?,c#,asp.net,forms,stream,C#,Asp.net,Forms,Stream,文本文件用于描述web浏览器上游戏的状态。所以我需要格式化我的nameWriter.WriteLine,使其看起来像 Output to text file: playerOneName, playerTwoName, _ , _ , _ , _ , _ , _ , _ , _ 我知道这听起来像是“哦,就写这个吧!”但不是,下划线是一个空白字段,将由我的StreamWriter替换,它跟踪玩家在tic-tac-toe网络游戏中的动作。我可以用什么来代替下划线来让我的读写空间可用 这是我的Str
Output to text file:
playerOneName, playerTwoName, _ , _ , _ , _ , _ , _ , _ , _
我知道这听起来像是“哦,就写这个吧!”但不是,下划线是一个空白字段,将由我的StreamWriter替换,它跟踪玩家在tic-tac-toe网络游戏中的动作。我可以用什么来代替下划线来让我的读写空间可用
这是我的StreamWriter,现在我只有添加玩家名的功能
你能告诉我如何将输出格式化为文本吗?
也许把它分成一个数组?并使用数组分隔符列表键入逗号
string[] lineParts... and reference the linePart[0-11]
and then do a lineParts = line.Split(delimiterList)?
这是我的代码
private void WriteGame(string playerOneName, string playerTwoName, string[] cells)
{
StreamWriter gameStateWriter = null;
StringBuilder sb = new StringBuilder();
try
{
gameStateWriter = new StreamWriter(filepath, true);
gameStateWriter.WriteLine(playerOneName + " , " + playerTwoName);
string[] gameState = { playerOneName,
playerTwoName, null, null, null, null,
null, null, null, null, null };//I cannot use null, they will give me errors
foreach (string GameState in gameState)
{
sb.Append(GameState);
sb.Append(",");
}
gameStateWriter.WriteLine(sb.ToString());
}
catch (Exception ex)
{
txtOutcome.Text = "The following problem ocurred when writing to the file:\n"
+ ex.Message;
}
finally
{
if (gameStateWriter != null)
gameStateWriter.Close();
}
}
最后,如果文本文件中已经有playerName,我如何在它之后专门写playerWoName并检查它是否存在?
使用Visual Studio'08 ASP.NET网站和表单首先,定义以下事实:下划线是一种特殊的东西,对您来说意味着空,逗号是分隔符:
const string EMPTY = "_";
const string DELIMITER = ",";
其次,不要在逗号和值之间写空格,这只会让你以后的生活更加困难:
// removed spaces
gameStateWriter.WriteLine(playerOneName + DELIMITER + playerTwoName);
现在您的游戏状态已准备好创建:
string[] gameState = { playerOneName, playerTwoName, EMPTY, EMPTY, EMPTY, EMPTY,
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, };
要检查播放器2是否已经存在,您需要打开并读取现有文件,并检查第二个令牌是否为空。也就是说,如果您已经阅读了该文件
var line = "..."; // read the file until the line that .StartsWith(playerOne)
var playerTwo = line.Split(DELIMITER)[1];
if (playerTwo == EMPTY)
{
// need to store the real playerTwo, otherwise leave as is
}
首先,定义以下事实:下划线是一种特殊的东西,对您来说意味着空,逗号是您的分隔符:
const string EMPTY = "_";
const string DELIMITER = ",";
其次,不要在逗号和值之间写空格,这只会让你以后的生活更加困难:
// removed spaces
gameStateWriter.WriteLine(playerOneName + DELIMITER + playerTwoName);
现在您的游戏状态已准备好创建:
string[] gameState = { playerOneName, playerTwoName, EMPTY, EMPTY, EMPTY, EMPTY,
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, };
要检查播放器2是否已经存在,您需要打开并读取现有文件,并检查第二个令牌是否为空。也就是说,如果您已经阅读了该文件
var line = "..."; // read the file until the line that .StartsWith(playerOne)
var playerTwo = line.Split(DELIMITER)[1];
if (playerTwo == EMPTY)
{
// need to store the real playerTwo, otherwise leave as is
}
你可以保留你的代码,但不是
sb.Append(游戏状态)代码>执行<代码>某人追加(游戏状态??)代码>在当前代码中
“?”在C#-所以null的结果??“
是”;是“SomeValue”?“
是“SomeValue”。你可以保留你的代码,但不是sb.Append(游戏状态)代码>执行<代码>某人追加(游戏状态??)代码>在当前代码中
“?”在C#-所以null的结果??“\u”
是“\u”并且是“SomeValue”?“\u”
是“SomeValue”仅供参考:您的streamwriter应该位于使用的块中。它将负责在其作用域结束时处理流。此外,为什么您的网站需要创建文本文件来存储信息?文本文件是服务器文件,我正在练习如何将服务器上的文件读写到浏览器。对于玩家在tic tac toe游戏的9个按钮中的每一个移动,都会记录在服务器文本文件中,由玩家二共享。所以他们在同一个文件上玩同一个游戏。但是可以有多个游戏在进行。这意味着我需要使用不同的线来跟踪每个游戏的进程。是的,代码还有很多其他问题(为什么游戏状态是一组字符串而不是一个对象?这是最大的问题)。事实上,我在做一个3人项目,而我的同龄人没有帮助。真见鬼,如果我知道到底要去那里干什么。如果你有任何建议的话,我很想听听,我就是通过尝试和错误来完成这个项目的。两个玩家共享这个文件,一个数组会给我11个位置。2个用于玩家,9个用于tic tac toe场上的按钮数量。因此,如果他们按下按钮5,我的球员姓名后的第五个字段将变成“X”。所以,在检查winner时,我会在该数组中寻找不同的组合以找到winner。仅供参考:您的streamwriter应该位于使用
的块中。它将负责在其作用域结束时处理流。此外,为什么您的网站需要创建文本文件来存储信息?文本文件是服务器文件,我正在练习如何将服务器上的文件读写到浏览器。对于玩家在tic tac toe游戏的9个按钮中的每一个移动,都会记录在服务器文本文件中,由玩家二共享。所以他们在同一个文件上玩同一个游戏。但是可以有多个游戏在进行。这意味着我需要使用不同的线来跟踪每个游戏的进程。是的,代码还有很多其他问题(为什么游戏状态是一组字符串而不是一个对象?这是最大的问题)。事实上,我在做一个3人项目,而我的同龄人没有帮助。真见鬼,如果我知道到底要去那里干什么。如果你有任何建议的话,我很想听听,我就是通过尝试和错误来完成这个项目的。两个玩家共享这个文件,一个数组会给我11个位置。2个用于玩家,9个用于tic tac toe场上的按钮数量。因此,如果他们按下按钮5,我的球员姓名后的第五个字段将变成“X”。所以,当检查winner时,我在该数组中寻找不同的组合以找到winner。谢谢,你为我分解了它,真的很好。谢谢,你为我分解了它,真的很好。这很酷,谢谢你向我展示了这一点,当我需要定义一个带有默认值的空变量时,我会记住这一点。对于我来说,这个“u”空值需要由我的StreamWriter写入X或O。如果我将默认值设置为X,它会工作吗,所以我只需要处理玩家2的符号。这很酷,感谢您向我展示了这一点,当我需要定义一个带有默认值的可空变量时,我会记住这一点。对于我的,这个“u”空值需要由我的StreamWriter写入X或O。如果我将默认值设置为X,它会工作吗,所以我只需要处理玩家2的符号。