我收到了一个文本文件,例如3行:
Example Text
Some text here
Text
我想在“here”之后直接添加一些文字,所以它看起来像这样:
Example Text
Some text hereADDED TEXT
Text
到目前为止,我的代码看起来像这样,我使用了here中的一些代码,但它似乎不起作用。
List<string> txtLines = new List<string>();
string FilePath = @"C:\test.txt";
foreach (string s in File.ReadAllLines(FilePath))
{
txtLines.Add(s);
}
txtLines.Insert(txtLines.IndexOf("here"), "ADDED TEXT");
using (File.Create(FilePath) { }
foreach (string str in txtLines)
{
File.AppendAllText(FilePath, str + Environment.NewLine);
}
我的问题是:
txtLines.IndexOf("here")
会返回-1
,因此会抛出System.ArgumentOutOfRangeException
。
有人可以告诉我我做错了吗?
答案 0 :(得分:2)
是否有理由将所有文字加载到列表中?您可以在从文件中读取值时更新值。
string FilePath = @"C:\test.txt";
var text = new StringBuilder();
foreach (string s in File.ReadAllLines(FilePath))
{
text.AppendLine(s.Replace("here", "here ADDED TEXT"));
}
using (var file = new StreamWriter(File.Create(FilePath)))
{
file.Write(text.ToString());
}
答案 1 :(得分:0)
以下是一段可以帮助您的代码。只需替换你的行txtLines.Insert(txtLines.IndexOf(“here”),“ADDED TEXT”);以下。它在这里找到第一个并用hereADDED TEXT替换它:
int indx=txtLines.FindIndex(str => str.Contains("here"));
txtLines[indx]= txtLines[indx].Replace("here", "hereADDED TEXT");
答案 2 :(得分:-2)
string filePath = "test.txt";
string[] lines = File.ReadAllLines(FilePath);
for (int i = 0; i < lines.Length; i++)
{
lines[i] = lines[i].Replace("here", "here ADDED TEXT");
}
File.WriteAllLines(filePath, lines);
它会做你想要的技巧。