C# 如何重命名文件中选定的文本?

C# 如何重命名文件中选定的文本?,c#,listbox,rename,C#,Listbox,Rename,我已经做了一个程序,你可以在文本框上添加文本,并将其添加到列表框中。现在,为了在下次应用程序启动时实际保存它,我决定将它存储到某个text.ini文件中 现在,应用程序下次启动表单加载时,将使用StreamReader读取该文件中的所有文本,并将其显示在列表框中 我决定实现一个编辑功能,从列表框->右键单击->编辑中选择项目,并重命名文件以防拼写错误 我的问题是: 如果我在列表框中有一个项目并将其重命名,那么它工作得非常好 但是,如果列表框中有2个或多个项目,但决定只重命名1个,则会从文件中删除

我已经做了一个程序,你可以在文本框上添加文本,并将其添加到列表框中。现在,为了在下次应用程序启动时实际保存它,我决定将它存储到某个text.ini文件中

现在,应用程序下次启动表单加载时,将使用StreamReader读取该文件中的所有文本,并将其显示在列表框中

我决定实现一个编辑功能,从列表框->右键单击->编辑中选择项目,并重命名文件以防拼写错误

我的问题是:

如果我在列表框中有一个项目并将其重命名,那么它工作得非常好

但是,如果列表框中有2个或多个项目,但决定只重命名1个,则会从文件中删除所有文本,并仅重命名选定的项目

这是我的代码:

string itemName = (string)lBoxRadioLinks.SelectedItem;
var renameFile = Interaction.InputBox("Enter a new name for the file:", "Rename File", itemName);

// Gets the selected item full name
var url = lBoxRadioLinks.GetItemText(lBoxRadioLinks.SelectedIndex);
string lineToRename = url.ToString();

// Selected file
//MessageBox.Show(lineToRename);

// ACTUALLY rename the text
string[] lines = File.ReadAllLines("IO/sites.ini");
List<string> list = new List<string>();

foreach (string line in lines)
{
    if (line != lineToRename)
        list.Add(line);
}

// Have to convert the string into array for an actual rename
string[] arr = new string[] { renameFile };

// Visually rename the file (display in listbox asap)
lBoxRadioLinks.DataSource = arr;

// Renames the file
File.WriteAllLines("IO/sites.ini", arr);  
显然WriteAllines方法将重命名文件中的整个文本,但我不希望这样


如何重命名位于某一行的文本,而不影响文件中的其他行?

我真的不知道你在问什么,但我会尽力做到这一点

如果我们在同意您要替换文本文件中的某些文本时彼此理解,并且如果您实际上可以将整个内容加载到内存中,那么您最好使用string.replace方法


至于列表框中的多个项目存在的问题,您只引用了SelectedItem和SelectedIndex属性,因此除了这些…文件之外,其他任何地方都不应该更改?我还不知道列表框里有什么。如果要一次修改多个属性,则应使用这些属性的复数形式来访问所有选定项,而不仅仅是第一项。

您是在谈论重命名文件,还是替换文件中的文本?替换文件中的文本。例如,我在一个文件中有这样的内容:Hello World,假设我选择了第二项并想将其重命名为文本,那么在文件中它应该是Hello TextName,renameFile是在哪里定义的?很抱歉,请再次检查代码。这听起来确实像是你试图重命名一个文件,而不是替换其中的文本…它工作了!您的第一个想法:var contents=File.ReadAllTextIO/sites.ini;File.WriteAllTextIO/sites.ini,contents.ReplacelineToRename,rename文件;它成功地重命名了文本文件中的一行,而不影响其他文本,这正是我想要的。非常感谢。很高兴我能帮上忙。请将此标记为一个答案,以帮助将来有类似问题的任何人。
Dictionary<string, string> changesToMake = ...;
var contents = File.ReadAllText(filename);

foreach(var change in changesToMake)
{
    contents = contents.Replace(change.Key, change.Value);
}

File.WriteAllText(filename, contents);