用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);
            }
        }
    }
}

我缺少的是什么?我尝试了很多方法从文本文件中删除一行,但都不起作用。我尝试了这个,因为它的文件操作是迄今为止最少的。

谢谢!

用arraylist删除C#文件行

你可以做:

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,这里有关于如何操作的适当文档。您的代码实际上应该可以工作,所有这些答案都更加面向语义。问题可能是由于实际数据,你能提供一个样本吗?我不能用你的代码复制。