我创建了一个存储不同航班信息的文本文件。我希望管理员能够通过点击相关的“删除”按钮来删除此页面中的广告投放。我有以下代码:
private void removeButtons()
{
for (int x = 0; x < buttons.Count(); x++)
{
Button booked = buttons[x];
booked.Click += new EventHandler(removeFlights);
}
}
private void removeFlights(object sender, EventArgs e)
{
string tempFile = Path.GetTempFileName();
using (var sr = new StreamReader(AppendTexts.flightPathText))//Location of file
{
using (var sw = new StreamWriter(tempFile))
{
string line;
while ((line = sr.ReadLine()) != null)
{
String[] flights = line.Split(',');
for (int x = 0; x < buttons.Count(); x++)//If the button clicked matches all the fields, skip it, otherwise write it to temp file
{
if (airline[0].Text == flights[0] & price[x].Text == flights[1] & cityStartMatch[x].Text == flights[2] & stateStartMatch[x].Text == flights[3] &
cityDestMatch[x].Text == flights[4] & stateDestMatch[x].Text == flights[5] & seatsMatch[x].Text == flights[6] & dateMatch[x].Text == flights[7])
{
}
else
{
sw.WriteLine(flights[0] + "," + flights[1] + "," + flights[2] + "," + flights[3] + "," + flights[4] + "," + flights[5] + "," + flights[6] + "," + flights[7]);
}
}
}
sr.Close();
}
}
File.Delete(AppendTexts.flightPathText);
File.Move(tempFile, AppendTexts.flightPathText);
}
我遇到的问题是,它不是删除旧行,而是将其他行重新添加到文件中。因此,如果我有使用达美航空公司的航班和使用西南航空公司的其他航班,并且我尝试移除达美航空公司,当我再次列出航班时,达美航空公司出现一次,但西南航空公司出现两次。
答案 0 :(得分:1)
一个。在不良实践中使用文本文件作为数据库。
B中。从集合中删除多个值时 要么使用您编写的临时集合 物有所值。 然后删除原始集合并使用temp one覆盖。 或者......从头到尾删除就地, 这样当前索引就不会被删除。 (从大文本文件中删除时,建议使用临时文件, 在第二种方法中,您还必须继续减小文件大小。)
℃。在您的解决方案中,您没有改变立场 在每次写入之前纠正一个相对于文件开头的calculsted (并在每次阅读前重新调整)。
答案 1 :(得分:0)
数据库很棒,对这类应用程序非常有用,并且会大大改善您的应用程序。
我是一名交易开发人员,花费大约20%/ 30%的时间编写SQL(数据库语言),这真的是你应该用于ASP.NET应用程序或任何Web应用程序的事情。
一旦你学会并完全开始使用它,你会想知道如果没有它你会怎么做。