首页 > 解决方案 > 在某个时间点写入 .txt 文件

问题描述

我在这里要做的是将用户选择的某个字符串写入 .txt 文件,但仅限于 .txt 文件的某个部分,例如:

一个文本文件将包含:

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

如果我在下拉列表中TextBox输入单词new_user(例如),我将选择我正在尝试在 .txt 文件中查找此行,然后将其附加为:comboboxUSERNAME

#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我在想一个循环需要吗?谢谢你的帮助,不胜感激。

标签: c#

解决方案


解决这个问题的最简单方法是使用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]);
    }
}

推荐阅读