如何在文本文件的某些行之前只写一个#

本文关键字:一个 文本 文件 | 更新日期: 2023-09-27 18:16:50

我有一个文本文件,如下所示:

Rows
...
product.people
product.people_good
product.people_bad
product.boy
#product.me
...
Rows

我想把#放在product.之前,文件是:

Rows
...
#product.people
#product.people_good
#product.people_bad
#product.boy
#product.me
...
Rows

为此,我使用下一个代码:

string installerfilename = pathTemp + fileArr1;
 string installertext = File.ReadAllText(installerfilename);
 var linInst = File.ReadLines(pathTemp + fileArr1).ToArray();
 foreach (var txt in linInst)
 {
     if (txt.Contains("#product="))
      {              
          installertext = installertext.Replace("#product=", "product=");
      }
     else if (txt.Contains("product.") && (!txt.StartsWith("#")))
      {
        installertext = installertext.Replace(txt, "#" + txt);
      }
       File.WriteAllText(installerfilename, installertext);
 }

但是这个代码做下一件事:

Rows
...
#product.people
##product.people_good
##product.people_bad
#product.boy
#product.me
...
Rows

有人能给我解释一下吗?我怎么能在这些行之前只写一个#?

如何在文本文件的某些行之前只写一个#

当前,您正在读取同一文本文件两次——一次作为单独的行,一次作为整体。然后,您将根据行数对文件进行多次重写。这一切都坏了。我怀疑你只是想:

// Note name changes to satisfy .NET conventions
// Note: If pathTemp is a directory, you should use Path.Combine
string installerFileName = pathTemp + fileArr1;
var installerLines = File.ReadLines(installerFileName)
                            .Select(line => line.StartsWith("product=") ? "#" + line : line)
                            .ToList();
File.WriteAllLines(installerFileName, installerLines);

如果写入的文件与读取的文件不同,则不需要ToList调用。

您可以通过product进行拆分,然后将其连接到一个新字符串:

        // string installerFileText = File.ReadAllText(installerFileName);
        string installerFileText = @"
        Rows
        ...
        product.people
        product.people_good
        product.people_bad
        product.boy
        ...
        Rows";
        string[] lines = installerFileText.Split(new string[] { "product." }, StringSplitOptions.None);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < lines.Length; i++)
            sb.Append(((i > 0 && i < lines.Length) ? "#product." : "") + lines[i]);
        // File.WriteAllText(installerFileName, sb.ToString());
        Console.WriteLine(sb.ToString());
        Console.ReadKey();

输出:

        Rows
        ...
        #product.people
        #product.people_good
        #product.people_bad
        #product.boy
        ...
        Rows";
else if (txt.Contains("product.") && (!txt.StartsWith("#")))
{
    installertext = installertext.Replace(txt, "#" + txt);
}

为什么不将"!txt.StartsWith("#"("替换为"!txt.Contains("#("?

我想那就行了!