C# 如何在匹配字符串C时移动到文件中的特定行

C# 如何在匹配字符串C时移动到文件中的特定行,c#,.net,winforms,listview,windows-forms-designer,C#,.net,Winforms,Listview,Windows Forms Designer,假设我有一个包含以下内容的contacts.txt文件: adam adam@gmail.com kris kris@gmail.com james james@gmail.com 我还将文件内容存储在ListView ListView1中,如下所示: adam adam@gmail.com kris kris@gmail.com james james@gmail.com 我已经将contextmenustrip与项目更新一起使用 在列表视图中,我右键单击james行并选择

假设我有一个包含以下内容的contacts.txt文件:

adam
adam@gmail.com
kris
kris@gmail.com
james
james@gmail.com
我还将文件内容存储在ListView ListView1中,如下所示:

adam    adam@gmail.com
kris    kris@gmail.com
james   james@gmail.com
我已经将contextmenustrip与项目更新一起使用

在列表视图中,我右键单击james行并选择update,然后将加载一个新表单,询问姓名和电子邮件以进行更新

在文本框中输入姓名和电子邮件后,单击“更新”按钮,相应的人员姓名和电子邮件必须在contacts.txt文件中更新,该表单将关闭并返回到以前的表单

比如说我把詹姆斯·邦德的名字改了&电邮到bond@gmail.com.

现在内容应该是:

adam
adam@gmail.com
kris
kris@gmail.com
bond 
bond@gmail.com

此外,在右键单击更新时,将加载新表单,提示输入此实例的名称和电子邮件。假设我在ListView中单击james行,我希望james被放置在名称和james@gmail.com要放置在新表单文本框中的电子邮件上,请单击UpdateMonitorIP。

有几种方法。这里有一些。我会用你的例子

读取内存中文件的所有行,例如字符串[]。对于数组中的每一行,如果找到james,用bond替换它,然后在下一个位置写入bond@gmail.com. 然后将所有行写回同一个文件

var lines = File.ReadAllLines(@"C:\test.txt");

for (int i = 0; i < lines.Length; i++) {
    var line = lines[i];
    if (line == "james") {
        lines[i] = "bond";
        lines[i + 1] = "bond@gmail.com";
    }
}

File.WriteAllLines(@"C:\test2.txt", lines);

更新后,ListView.items是最新的。迭代ListView.items并将每个项写回文件。

名称中是否有重复项?例如,有两个bond条目,但有两封不同的邮件?文件是否太长,您无法完全阅读它,然后再写回?没有,不能有重复的名称。此外,在右键单击更新时,新表单将被加载,提示输入名称和电子邮件,例如,我单击listview我希望将james放置在名称和james@gmail.com要在新表单的文本框中放入电子邮件,请单击UpdateMonitorIP。只需将该代码放入一个接收4个参数的函数中:oldName,这是您已经知道的。newName,在文本框中输入的一个,oldEmail,你已经知道,newEmail,也在文本框中输入。同样,如果我们想从文件C中删除一行与字符串“如果你想做什么”匹配的内容,我们可以将此对话移动到聊天,因为你现在要求的是不同的内容。您可以执行以下操作:Regex.Replacetext、string.Format{0}[\r\n],Regex.Escapeline;其中line是您要替换的行内容。此外,当新表单将加载时,在更新的右键单击,提示输入此实例的名称和电子邮件时,请说我单击listview中的james行,我希望james被放置在名称和电子邮件上james@gmail.com要放置在新表单文本框中的电子邮件上,请单击更新列表
var text = File.ReadAllText(@"C:\test.txt");

string oldName = "james";
string newName = "bond";
string oldEmail = "james@gmail.com";
string newEmail = "bond@gmail.com";

var newText = Regex.Replace(
    text,
    string.Format(@"{0}([\n\r]+){1}", Regex.Escape(oldName), Regex.Escape(oldEmail)),
    string.Format(@"{0}$1{1}", newName, newEmail));

File.WriteAllText(@"C:\test.txt", newText);