C# 检查字符串是否在文件中,如果是,则替换包含该字符串的特定行

C# 检查字符串是否在文件中,如果是,则替换包含该字符串的特定行,c#,C#,基本上,这将一行接一行地向文件中写入名称和分数,我想添加一些验证,检查文件中是否有人输入用户名,然后用新用户名和分数数据覆盖整行 “classicsscore”引用以前存储为整数的用户分数。然后将其与该人员的输入字符串用户名(即“John 12”)一起放入文本文件中。我想要的是,如果一个人输入John作为他们的用户名,分数为400,那么该行将被替换为“john400”,而不会影响文本文件的其余部分 我使用的是Visual studio,C#控制台程序 抱歉,如果这是重复的,我自己找不到具体的答案

基本上,这将一行接一行地向文件中写入名称和分数,我想添加一些验证,检查文件中是否有人输入用户名,然后用新用户名和分数数据覆盖整行

“classicsscore”引用以前存储为整数的用户分数。然后将其与该人员的输入字符串用户名(即“John 12”)一起放入文本文件中。我想要的是,如果一个人输入John作为他们的用户名,分数为400,那么该行将被替换为“john400”,而不会影响文本文件的其余部分

我使用的是Visual studio,C#控制台程序


抱歉,如果这是重复的,我自己找不到具体的答案。

我想这样的东西应该适合你

Console.WriteLine("What name would you like to be known as?");
string usernameforscore = Console.ReadLine();
int classicscore = 0;
string path = "";
File.AppendAllText(path, (usernameforscore + " " + classicscore + Environment.NewLine));

但是,除非您出于某种原因需要这种特定格式,否则使用数据库将是一个更好的选择。

ClassicCore的本质是什么?例如,我们是否保证它不包含任何嵌入的空格,从而保证我们可以通过查找一行中的最后一个空格来查找和删除它?是的,我不知道什么是ClassicCore,也不知道你说的太多。所以我不能回答这个问题。如果有帮助的话,它是一个.txt文件。@DomBeasley这是代码中的一个变量
usernameforscore+“”+classiccore
你怎么不知道它是什么?如果有人键入
John 9
作为用户名,并且已经有一行user
John
的分数
9
(根据你的代码,这两行之间有一个空格)怎么办?使用空格作为分隔符永远不会安全,您需要一个可以禁止在用户名中存在的分隔符。当然,这里最好的选择是使用标准格式,如JSON或XML,这将解决您的边缘情况。还有很多很好的图书馆,可以让你的生活更轻松。我想我可以查看数据库,以前从未使用过。我现在就试着实现它,谢谢。所有这些似乎都是在同一行的另一行上写下名字和分数,而不是替换任何东西。我不得不添加static来让它工作,所以我可能把它搞砸了,是的,改变
writer.Write(line)
写入器写入线(行)
public void AddOrUpdate(string userName, int score)
{
    string path = "";
    var newLine = userName + " " + score;
    var lines = File.ReadAllLines(path);
    var wasUpdated = false;
    using (var writer = new StreamWriter(path))
    {
        foreach (var line in lines)
        {
            var foundUserName = line.Substring(0, line.LastIndexOf(' '));
            if (foundUserName == userName)
            {
                writer.WriteLine(newLine);
                wasUpdated = true;
            }
            else
                writer.WriteLine(line);
        }
        if(!wasUpdated)
            writer.WriteLine(newLine);
    }
}