1

我有一个文本文件,例如 3 行:

Example Text
Some text here
Text

我想直接在“这里”之后添加一些文本,所以它看起来像这样:

Example Text
Some text hereADDED TEXT
Text

到目前为止,我的代码看起来像这样,我使用了这里的一些代码,但它似乎不起作用。

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.

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

4

3 回答 3

3

您是否有理由将所有文本加载到列表中?您可以在从文件中读取值时更新它们。

        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());
        }
于 2013-10-10T10:35:08.037 回答
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");
于 2013-10-10T10:57:14.427 回答
-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);

它会做你想要的伎俩。

于 2013-10-10T10:35:57.010 回答