我有一个问题,删除文本列表,而没有删除保存在文件中的所有文本,如果我搜索1,则1中的行将被删除而另一行将不会被删除受影响这是示例输出..
示例输出:
Nike SB 8000 1
勒布朗7 9000 2这是我的代码:
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.");
}
}
答案 0 :(得分:2)
无法编辑磁盘内文本文件的内容。你必须再次覆盖该文件。
此外,您可以将数组转换为列表,并使用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 Framework版本(3.5及更低版本), 编辑,您必须调用ToArray()
,因为WriteAllLines
只接受数组作为第二个参数。
答案 1 :(得分:2)
你可以用linq做到这一点。
lines = File.ReadAllLines("Inventory.txt").Where(x => !x.Equals(txtSearch.Text));
File.WriteAllLines("Inventory.txt", lines);
答案 2 :(得分:1)
你完全错了,而是从集合中删除该行并写下
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());