用arraylist删除C#文件行
本文关键字:文件 删除 arraylist | 更新日期: 2023-09-27 18:30:10
我正在尝试创建一个类,它将帮助我从文件中删除一个特定的行。所以我想出了一个主意,把所有的行都放在一个数组列表中,从列表中删除我不需要的行,清除我的.txt文件,然后写回列表中剩下的对象。我的问题是,我遇到了一些我无法解决的逻辑错误,无法从数组列表中删除行并再次将其写回。这是我的代码:
public class delete
{
public void removeline(string line_to_delete)
{
string[] lines = File.ReadAllLines("database.txt");
ArrayList list = new ArrayList(lines);
list.Remove(line_to_delete);
File.WriteAllText("database.txt", String.Empty);
using (var writer = new StreamWriter("database.txt"))
{
foreach (object k in lines)
{
writer.WriteLine(k);
}
}
}
}
我缺少的是什么?我尝试了很多方法从文本文件中删除一行,但都不起作用。我尝试了这个,因为它的文件操作是迄今为止最少的。
谢谢!
你可以做:
var line_to_delete = "line to delete";
var lines = File.ReadAllLines("database.txt");
File.WriteAllLines("database.txt", lines.Where(line => line != line_to_delete));
File.WriteAllLines
将覆盖现有文件。
不要使用ArrayList
,有一个通用的替代List<T>
。您的代码由于使用ArrayList
而失败,因为它只能删除符合条件的单行。使用List<T>
,可以使用RemoveAll
删除所有符合条件的行。
如果你想与忽略情况进行比较,你可以这样做:
File.WriteAllLines("database.txt", lines.Where(line =>
!String.Equals(line, line_to_delete, StringComparison.InvariantCultureIgnoreCase)));
我相信你的意图是:
public static void RemoveLine(string line)
{
var document = File.ReadAllLines("...");
document.Remove(line);
document.WriteAllLines("..");
}
这将从集合中删除该行。另一种方法是简单地用Linq:过滤掉这条线
var filter = document.Where(l => String.Compare(l, line, true) == 0);
你可以在ArrayList
中做Remove
,这里有关于如何操作的适当文档。您的代码实际上应该可以工作,所有这些答案都更加面向语义。问题可能是由于实际数据,你能提供一个样本吗?我不能用你的代码复制。