使用system . io删除文本文件中的特定行

本文关键字:文件 system io 删除 文本 使用 | 更新日期: 2023-09-27 18:15:20

我遇到了一个问题,删除文本列表,而不删除保存在文件中的所有文本,如果我搜索1,1中的行将被删除,另一行将不受影响这是示例输出..

样本输出:

耐克某人80001

勒布朗790002

这是我的代码:

private void btnDelete_Click(object sender, EventArgs e)
    {
        try
        {
            string[] InventoryData = File.ReadAllLines("Inventory.txt");
            for (int i = 0; i < InventoryData.Length; i++)
            {
                if (InventoryData[i] == txtSearch.Text)
                {
                        System.IO.File.Delete("Inventory.txt");            
                }
            }
        }
        catch
        {
            MessageBox.Show("File or path not found or invalid.");
        }
    }

使用system . io删除文本文件中的特定行

不能在磁盘内编辑文本文件的内容。你必须重新覆盖文件。

还可以将数组转换为列表,并使用List(T).Remove方法从其中删除第一个匹配项。

string[] inventoryData = File.ReadAllLines("Inventory.txt");
List<string> inventoryDataList = inventoryData.ToList();
if (inventoryDataList.Remove(txtSearch.Text)) // rewrite file if one item was found and deleted.
{
    System.IO.File.WriteAllLines("Inventory.txt", inventoryDataList.ToArray());
}

如果你想在一次搜索中删除所有项目,那么使用List<T>.RemoveAll方法。

if(inventoryDataList.RemoveAll(str => str == txtSearch.Text) > 0) // this will remove all matches.

编辑:对于旧的。net框架版本(3.5和更低),你必须调用ToArray(),因为WriteAllLines只接受数组作为第二个参数。

您可以使用linq来完成这个简单的操作。

lines = File.ReadAllLines("Inventory.txt").Where(x => !x.Equals(txtSearch.Text));
File.WriteAllLines("Inventory.txt", lines);

你完全做错了,不如从集合中删除这行,然后写

List<string> InventoryData = File.ReadAllLines("Inventory.txt").ToList();            
for (int i = 0; i < InventoryData.Count; i++)
{
    if (InventoryData[i] == txtSearch.Text)
    {
        InventoryData.RemoveAt(i);
        break;            
    }
}
System.IO.File.WriteAllLines("Inventory.txt", InventoryData.AsEnumerable());