if (intBestNumberOfTries > intNumberOfTries)
{
string searchFor = LoginForm.strLoginName;
string line;
using (StreamReader file = new StreamReader(@"NameList.txt"))
{
while ((line = file.ReadLine()) != null)
{
if (line.Contains(searchFor))
{
line.Remove(0);
}
}
}
}
StreamWriter scoreboard = new StreamWriter(@"NameList.txt", true);
scoreboard.WriteLine(""[{0}] " + LoginForm.strLoginName + " scored: {1}", intBestNumberOfTries, intBestNumberOfTries);
scoreboard.Close();
我的Loginform.strLoginName;
来自另一个编程文件。运行程序后,它不会删除整行。相反,它写了一个新的行。
searchFor
是我在程序中的登录名。
答案 0 :(得分:3)
这不能以您提供的方式完成。您需要重写文件。
怎么样?
您必须将文件读入内存结构,删除内存中的行,然后将内容返回添加到文件中(它只是覆盖) 。
如果您处理的文件很大或很大,您必须逐行读取并创建临时文件(作为帮助程序),然后只需替换原始文件。
但是,如果文件很大,您可以使用asynchronous
操作,以便不阻止当前线程。 c#
StreamReader 功能使用StreamReader.ReadToEndAsync方法为此提供了解决方案。
现在,对于您的问题,您应该使用{strong>返回字符串数组的File.ReadAllLines
方法。
string[] lines = File.ReadAllLines("NameList.txt");
最后一步是filter
这个数组。
string[] filteredLines = lines.Where(l => !line.Contains(searchFor)).ToArray()
答案 1 :(得分:2)
字符串是不可变的,这就是为什么像String.Remove
这样的每个string.method都会返回一个新字符串的原因。您必须将此返回的字符串分配给您的变量。例如:Remove(0)
。虽然我认为你想要完全不同的东西(string[] allLines = File.ReadAllLines("NameList.txt");
string[] keepLines = Array.FindAll(allLines, line => !line.Contains(searchFor));
File.WriteAllLines("NameList.txt", keepLines);
将返回一个空字符串)。阅读方法的documentation以了解他们正在做什么。
如果你想从文件中删除这一行,你必须用你要保留的行重写它:
ReadLines
或使用LINQ(var allLines = File.ReadLines("NameList.txt");
var keepLines = allLines.Where(line => !line.Contains(searchFor));
File.WriteAllLines("NameList.txt", keepLines.ToList());
使用流媒体方法):
{{1}}
答案 2 :(得分:0)
执行以下操作,您需要覆盖
string tempFile = Path.GetTempFileName();
using (var sr = new StreamReader("NameList.txt"))
using (var sw = new StreamWriter(tempFile))
{
string line;
while ((line = sr.ReadLine()) != null)
{
if (line.Contains(searchFor))
sw.WriteLine(line);
}
}
File.Delete("NameList.txt");
File.Move(tempFile, "NameList.txt");
您也可以使用Linq
var tempFile = Path.GetTempFileName();
var linesToKeep = File.ReadLines(fileName).Where(l => l.Contains(searchFor));
File.WriteAllLines(tempFile, linesToKeep);
File.Delete(fileName);
File.Move(tempFile, fileName);
如果你不处理大文件,那么你可以摆脱Temp文件
File.WriteAllLines(fileName,
File.ReadLines(fileName).Where(l => !l.Contains(searchFor)).ToList());