C# - 在一行旁边写一个字符串或删除一个字符串

时间:2013-04-12 17:46:13

标签: c#

我想在一行旁边写一个字符串,随机可以是任意一行,我也想知道如何从中删除一行,以下是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行,所以如果你能为大文件提供解决方案,谢谢!

1 个答案:

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

如果我误解了你想做什么,我很抱歉。

相关问题