簡體   English   中英

C#文件行用arraylist刪除

[英]C# file line remove with arraylist

我正在嘗試創建一個類,它將幫助我從文件中刪除特定行。 因此,我想到了將所有行放入arraylist的想法,從列表中刪除不需要的行,清除.txt文件並寫回列表的其余對象。 我的問題是我遇到某種我無法發現的邏輯錯誤,該錯誤不會從arraylist中刪除該行並將其再次寫回。 這是我的代碼:

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

您可以執行ArrayListRemove適當文檔,以了解此處的操作 您的代碼實際上應該可以工作,所有這些答案都是面向語義的。 問題可能是由於實際數據所致,您能否提供樣本? 我無法復制您的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM