在特定点写入.txt文件

时间:2019-12-18 18:47:48

标签: c#

我在这里要执行的操作是将用户选择的某个字符串写入.txt文件,但只能在.txt文件的某个部分进行写入,例如:

文本文件将包含:

#name|user_login
USERNAME
#password|pass_recovery|user_pass
PASSWORD
...
...
...

如果我在TextBox下拉菜单中输入new_user(例如)一词combobox,则我将选择USERNAME,这是我要查找的行在.txt文件中,然后将其附加为:

#name|user_login|new_user
USERNAME
#password|pass_recovery|user_pass
PASSWORD
...
...
...

大写字母中的任何行都一样,到目前为止,我的功能是:

        public void WriteToAIFile(string findThis, string writeThis)
        {
            var fileContent = File.ReadAllLines(@"LogicFiles\rj-ai-fields.txt");
            foreach (string eachLine in fileContent) {
                if (findThis == eachLine) {
                    // we have found the macro we want, go back up 1 line and append: "|" + writeThis to the end of the line ...

                    //var writeContent = File.WriteAllText(@"LogicFiles\rj-ai-fields.txt");
                }
            }
        }

非常基本,我想的是循环循环直到findThis == eachLine(这是大写字母的值),然后将writeThis附加到该行的末尾,但是我需要在追加之前返回1行,有没有更好的方法来实现这一点?我在想的只是需要foreach循环吗?谢谢您的帮助,不胜感激。

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用for循环而不是foreach对字符串数组进行索引。

然后,您可以编写一个循环,该循环从1而不是0开始,并滞后一个元素,使您可以更轻松地将文本附加到前一行。

然后,您将不得不在循环终止后的另一步骤中写入文件的最后一行。

类似这样的东西:

public void WriteToAIFile(string findThis, string writeThis)
{
    var fileContent = File.ReadAllLines(@"LogicFiles\rj-ai-fields.txt");

    using (var output = File.CreateText("My filename"))
    {
        for (int i = 1; i < fileContent.Length; ++i)
        {
            if (fileContent[i] == findThis)
                output.WriteLine(fileContent[i-1] + "|" + writeThis);
            else
                output.WriteLine(fileContent[i-1]);
        }

        output.WriteLine(fileContent[fileContent.Length-1]);
    }
}

答案 1 :(得分:0)

要在特定行之后插入一行,应使用向后for循环和List::Insert方法。参见List.Insert(Int32, T) Method