Попытка удалить строки из текстового файла - PullRequest
0 голосов
/ 26 марта 2011

Я создал текстовый файл, в котором хранится различная информация о рейсе. Я хочу, чтобы администраторы могли удалять рейсы с этой страницы, нажав соответствующую кнопку «удалить». У меня есть следующий код:

    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);
    }

Проблема, с которой я столкнулся, заключается в том, что вместо удаления старых строк он просто заново добавляет остальные в файл. Поэтому, если у меня есть рейс с использованием авиакомпании Delta, а другой - с использованием Southwest, и я пытаюсь удалить авиакомпанию Delta, когда я снова перечисляю рейсы, авиакомпания Delta появляется один раз, а авиакомпания Southwest - дважды.

Ответы [ 2 ]

1 голос
/ 26 марта 2011

A.Использование текстового файла в качестве базы данных в плохой практике.

B.При удалении нескольких значений из коллекции либо используйте временную коллекцию, в которую вы записываете правильное значение.Затем удалите оригинальную коллекцию и перезапишите временную.Или ... Удалить на месте от начала до конца, чтобы текущий индекс не был испорчен удаленным.(Использование временного файла более рекомендуется при удалении из больших текстовых файлов, во втором методе также необходимо продолжать уменьшать размер файла.)

C.В вашем решении вы не изменили положение, чтобы исправить его, рассчитанное относительно начала файла, перед каждой записью (и перенастройкой перед каждым чтением).

0 голосов
/ 26 марта 2011

Базы данных великолепны, действительно полезны для такого рода приложений и значительно улучшат ваши приложения.

Я по профессии разработчик и трачу около 20/30% своего времени на написание SQL (язык базы данных), и действительно это то, что вы должны использовать для приложения ASP.NET или любого веб-приложения в этом отношении ,

Как только вы изучите его и начнете полностью его использовать, вы удивитесь, как раньше обходились без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...