【问题标题】:C# Edit existing value on a specific line in a text file [duplicate]C#编辑文本文件中特定行上的现有值[重复]
【发布时间】:2019-12-29 02:02:43
【问题描述】:

我正在制作一个小游戏,但无法将游戏结果保存到文本文件中。 我尝试只阅读所需的行,但收效甚微:

List<string> a = File.ReadLines(path).Skip(2).Take(2).ToList();

文本文件里面有 4 行:

PlayerTag
Wins: 0
Losses: 0
Draws: 0

玩家获胜后,我想将获胜次数增加 1。

理想的方法是什么?

【问题讨论】:

  • 读取所有行,更改要更改的行,然后将所有行写入文本文件?
  • 读入整个文件,反序列化,更新,序列化,保存
  • var lines = File.ReadAllLines(path); int oldWins = int.Parse(lines[1].Split(": ")[1]); oldWins += 1; lines[1] = "Wins: " + oldWins.ToString(); File.WriteAllLines(path, lines);
  • 我建议你看看 JSON 序列化/反序列化。比解析自己的文本文件要容易得多。 dotnetfiddle.net/Pd43a6
  • 写一个简单的自定义类来封装你的球员得分历史,然后使用XmlSerializer

标签: c# streamreader streamwriter


【解决方案1】:

使用当前格式,您可以执行以下操作。

var str = File.ReadAllLines(filePath);
str[WinPosition] = Update(str[WinPosition]);
File.WriteAllLines(filePath);

其中 WinPosition 是一个常量,定义为

const int WinPosition = 1;
const int LossesPosition = 2;
const int DrawsPosition = 3;

而更新定义为

private string Update(string source)
{
    var data = source.Split(':');
    data[1] = (Int32.Parse(data[1])+1).ToString();
    return string.Join(":",data);
}

Update 方法将读取字符串,根据分隔符 (":") 对其进行拆分,然后更新数字部分。结合使用常量和通用更新方法,您可以像 Wins 一样更新 Losses 和 Draws(并且可能比直接使用 1/2/3 索引更具可读性)。

str[LossesPosition] = Update(str[LossesPosition]);
str[Draws] = Update(str[Draws]);

话虽如此,如果您可以选择更改文件格式,我建议您选择 Json 或 Xml。这将是比使用当前格式更好的方法。

【讨论】:

    猜你喜欢
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多