使用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.");
}
}
不能在磁盘内编辑文本文件的内容。你必须重新覆盖文件。
还可以将数组转换为列表,并使用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());