从列表<字符串>中删除项目,来源于文本文件
本文关键字:来源于 文本 文件 删除项目 列表 字符串 | 更新日期: 2023-09-27 18:36:44
我正在尝试从文本文件中删除一行文本,使用 StreamReader 导入文件,将内容添加到列表中,删除所需的行,重写到没有该行的文本文件中。但是,任何运行程序的尝试似乎都会导致无限循环,从文件中清除所有字符串,或者根本不清除一个文件。这是我的代码:
{
string read = "";
if (devOutput.Count() != 0) //Error Handling
{
using (StreamReader reader = new StreamReader("Devices.txt", true))
{
while ((read = reader.ReadLine()) != null)
{
deleteDevice.Clear();
deleteDevice.Add(read);
}
}
}
else
MessageBox.Show("2: No Devices Saved!");
using (StreamWriter writer = new StreamWriter("Devices.txt"))
{
do
{
foreach (string st in deleteDevice)
{
string split = st.ToString();
deleteDevice = split.Split(',').ToList();
}
if (deleteDevice.Contains(deviceList.SelectedItem.ToString()))
{
deleteDevice.Remove(i.ToString());
i = i + 1;
deleteDevice.Remove(i.ToString());
i = i + 1;
deleteDevice.Remove(i.ToString());
i = i + 1;
deleteDevice.Remove(i.ToString());
i = i + 1;
deleteDevice.Remove(i.ToString());
i = i + 4; //Progress to next device
}
}
while (i < deleteDevice.Count);
if (deleteDevice.Count != 0) //Error Handling
{
foreach (string st in deleteDevice)
{
writer.WriteLine(st);
}
}
}
deviceList.Items.Remove(deviceList.SelectedItem);
}
如果有更好的方法,比如使用数组而不是列表,那么实现这样的事情的最佳方法是什么。任何帮助都是值得赞赏的,干杯
while ((read = reader.ReadLine()) != null)
{
deleteDevice.Clear(); //this is the problem
deleteDevice.Add(read);
}
您在循环的每次迭代中清除列表(即每次读取一行时,您都在丢弃行列表)...您需要将deleteDevice.Clear()
移出while
的开始......
代码中存在许多错误:
1)在阅读时,您不断清除名为删除设备的字符串列表
deleteDevice.Clear(); // <- This line should be removed or moved before entering the loop
deleteDevice.Add(read);
2)在写入时,您将拆分的字符串重新确定为用于循环的同一变量。应该是编译错误,则无法删除在 for each 循环中使用的集合上的项。您应该使用从最后一个元素开始的法线 for 循环
for(int i = deleteDevice.Count - 1; i>=0; i--)
{
string split = deleteDevice[i].Split(',');
List<string> parts = split.ToList();
if (parts.Contains(deviceList.SelectedItem.ToString()))
{
deleteDevice.Remove(i);
}
}
... write to file...