-2

我想在一行旁边写一个字符串,随机可以是任何一行,我也想知道如何从中删除一行,这是我的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行了,请各位大侠给个解决办法,谢谢!

4

1 回答 1

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);

如果我误解了你想要做的事情,我很抱歉。

于 2013-04-12T17:57:45.347 回答