Почему мой текстовый файл не сохраняет свои изменения, когда я пытаюсь удалить из него строку? - PullRequest
0 голосов
/ 09 июля 2019

Просто создаю простое консольное приложение "искатель рыб" для проекта.Сохраняет информацию о выловленной рыбе, а затем извлекает информацию для вас, основываясь на том, какую рыбу вы ищете и как ее поймать.Вот основная проблема: я добавил пользователю функциональность для удаления ранее записанных уловов.Когда вы удаляете один, программа сама распознает это в памяти и, насколько вы видите, кажется, что он был удален.Однако, как только вы закроете программу и либо прочитаете фактический CSV-файл, либо запустите программу обратно, этот удаленный перехват останется.Кажется, что-то не так с моей логикой в ​​процессе записи в файл.Примечание: я всегда проверяю, что файл закрыт, когда я запускаю программу, чтобы предотвратить повреждение / сбои.

У меня есть класс Journal, который содержит список с именем Catches, в котором хранятся все записи, записанные пользователем,Это метод журнала, который запрашивает пользователя, когда он хочет удалить улов.В нем перечислены все зарегистрированные уловы пользователя, а затем логика удаления находится в последних нескольких строках.

    public void DeleteACatch()
    {
        int i = 1;
        Console.WriteLine("**** Delete a Catch ****");
        foreach(var ctch in catches)
        {
            Console.WriteLine($"{i} - {ctch.ToStringFormatted()}");
            i++;
        }
        Console.Write("Enter number of catch to delete (0 to cancel): ");
        int choice = int.Parse(Console.ReadLine());
        if(choice == 0)
        {
            Console.WriteLine("Returning to main menu...");
            return;
        }
        Catches.RemoveAt(choice - 1);
        Send();
        storageManager.Write();
        Console.WriteLine("Catch deleted.");
    }

Это метод отправки журнала.Просто отправляет данные объекту класса с именем StorageManager, который содержит список с именем data, который также содержит Catches.

    public void Send()
    {
        storageManager.Data.Clear();
        storageManager.Data = catches;
    }

Это метод записи StorageManager, который принимает данные Catches, хранящиеся в его списке, называемые данными.и затем перезаписывает файл CSV.

    public void Write()
    {
        FileStream stream = new FileStream("FishFinderData.txt", FileMode.OpenOrCreate, FileAccess.Write);
        StreamWriter fileWriter = new StreamWriter(stream);
        foreach (var d in data)
        {
            fileWriter.WriteLine($"{d.HourOfDay},{d.Location},{d.Species},{d.Bait}");
        }
        fileWriter?.Close();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...