在特定位置的文本文件中插入文本

时间:2013-10-10 10:14:22

标签: c# string text-files

我收到了一个文本文件,例如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

有人可以告诉我我做错了吗?

3 个答案:

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

它会做你想要的技巧。