[英]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);
您可以執行ArrayList
的Remove
適當文檔,以了解此處的操作 。 您的代碼實際上應該可以工作,所有這些答案都是面向語義的。 問題可能是由於實際數據所致,您能否提供樣本? 我無法復制您的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.