我想在一行旁边写一个字符串,随机可以是任意一行,我也想知道如何从中删除一行,以下是StreamReader
的工作方式:
using (StreamReader sb = new StreamReader("admin.txt"))
{
string[] ffoo = File.ReadAllLines("admin.txt");
string[] ppoof = ffoo[0].Split(';');
string line;
while ((line = sb.ReadLine()) != null)
{
if (line.StartsWith("#" + Server.Name.ToLower() + ": "))
{
string[] punch = line.Split(';');
if (!punch.Contains(Channel.Name.ToLower()))
{
StringBuilder str = new StringBuilder("admin.txt");
str.Append(Channel.Name.ToLower() + ";");
return;
}
}
}
以下是列表的制作方式:
#main: alien;nobody;somebody;
#devs: headdev;wae;
它读得很好,只是它不能在主通道旁边写一些东西,我的意思是我只能在它的末尾写一行或一个字符串,它在dev上,我想在main上写一些东西,也是我有一些关于如何从main或dev删除管理员的问题。此文件也会超大,我们使用后可能包含500行,所以如果你能为大文件提供解决方案,谢谢!
答案 0 :(得分:0)
调用StringBuilder.Append时,它会追加到字符串的末尾。
当调用StringBuilder(string)构造函数时,它将附加到作为构造函数的参数传递的字符串。
在这种情况下,您将“Admin.txt”作为字符串传递,但您确实想要传递Admin.txt的内容,因此您需要阅读它的内容。
这应该可以解决问题:
string[] lines = File.ReadAllLines("admin.txt");
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].StartsWith(string.Format("#{0}: ", Server.Name.ToLower()))
{
if (!lines[i].Split(';').Contains(Channel.Name.ToLower()))
lines[i] += ";" + Channel.Name.ToLower();
}
}
File.WriteAllLines("admin.txt", lines);
如果我误解了你想做什么,我很抱歉。