使用 Sytem.IO 删除文本文件中的特定行
Delete specific line in a text file , using Sytem.IO
我遇到了一个问题,删除文本列表,而不删除保存在文件中的所有文本,如果我搜索 1,则 1 中带有的行将被删除,而另一行不会被删除受影响的是示例输出..
示例输出:
耐克 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.");
}
}
无法编辑磁盘内文本文件的内容。你必须再次覆盖文件。
您也可以将数组转换为列表并使用 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
仅将数组作为第二个参数。
你完全做错了,而是从集合中删除该行并写下
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());
您可以使用 linq 轻松做到这一点。
lines = File.ReadAllLines("Inventory.txt").Where(x => !x.Equals(txtSearch.Text));
File.WriteAllLines("Inventory.txt", lines);
我遇到了一个问题,删除文本列表,而不删除保存在文件中的所有文本,如果我搜索 1,则 1 中带有的行将被删除,而另一行不会被删除受影响的是示例输出..
示例输出:
耐克 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.");
}
}
无法编辑磁盘内文本文件的内容。你必须再次覆盖文件。
您也可以将数组转换为列表并使用 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
仅将数组作为第二个参数。
你完全做错了,而是从集合中删除该行并写下
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());
您可以使用 linq 轻松做到这一点。
lines = File.ReadAllLines("Inventory.txt").Where(x => !x.Equals(txtSearch.Text));
File.WriteAllLines("Inventory.txt", lines);