我在这里要执行的操作是将用户选择的某个字符串写入.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
循环吗?谢谢您的帮助,不胜感激。
答案 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