如何在文本文件中的某些行之前只编写#?

时间:2015-10-09 10:48:00

标签: c#

我有一个像这样的文本文件:

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

有人可以解释我的方式吗?我怎么能在那行之前只写一个#?

3 个答案:

答案 0 :(得分:5)

目前,您正在阅读相同的文本文件两次 - 一行作为单独的行,一次作为整体。然后,您可以多次重写文件。这一切都被打破了。我怀疑你只是想要:

// 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来电。

答案 1 :(得分:2)

您可以按@ModelAttribute拆分,然后将其连接到新字符串:

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

答案 2 :(得分:-1)

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

为什么不用“!txt.Contains(”#“)”替换“!txt.StartsWith(”#“)”?

认为可以做到这一点!