我有一个像这样的文本文件:
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
有人可以解释我的方式吗?我怎么能在那行之前只写一个#?
答案 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(”#“)”?
认为可以做到这一点!