@bpGusar
*spoiler*

Как сделать что бы в типизированном файле данные записывались не стирая то что уже записано и вывести все на экран?

Я сделал так
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace WorkWithFile2
{
    class Program
    {
        [SerializableAttribute]

        struct Schedule
        {
            // id рейса
            public string idPoleta;
            // направление
            public string flightWay;
            // дата вылета
            public DateTime airDate;
            // продолжительность полета
            public int durationOfFlight;
            // количество свободных мест
            public int freePlaces;
        }

        static void Main(string[] args)
        {
            BinaryFormatter bf = new BinaryFormatter();
            FileStream fs = new FileStream(@"C:\Temp\schedule.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            Schedule shd;
            int choise = 1;
            while (choise != 0 )
            {
                Console.WriteLine("[1] - Добавить новый рейс");
                Console.WriteLine("[2] - Показать распиание");
                Console.WriteLine("[0] - Выход");
                Console.Write("Выбор: ");
                choise = int.Parse(Console.ReadLine());
                switch (choise)
                {
                    case 1:
                        {
                            Console.WriteLine("Добавить новый полет");

                            Console.Write("Введите ID рейса: ");
                            shd.idPoleta = Console.ReadLine();

                            Console.Write("Введите направление рейса: ");
                            shd.flightWay = Console.ReadLine();

                            Console.Write("Введите дату и время вылета (прим.: 12 мая 2016 12:36:55): ");
                            shd.airDate = DateTime.Parse(Console.ReadLine());

                            Console.Write("Введите продолжительность полета в часах (прим.: 12): ");
                            shd.durationOfFlight = int.Parse(Console.ReadLine());

                            Console.Write("Введите количество свободных мест: ");
                            shd.freePlaces = int.Parse(Console.ReadLine());

                            bf.Serialize(fs, shd);

                            fs.Flush();

                            fs.Seek(0, SeekOrigin.Begin);

                            shd = (Schedule)bf.Deserialize(fs);

                            Console.WriteLine("Рейс добавлен.");
                            Console.WriteLine("\tID рейса: {0}", shd.idPoleta);
                            Console.WriteLine("\tНаправление рейса: {0}", shd.flightWay);
                            Console.WriteLine("\tДата и время вылета: {0}", shd.airDate.ToString("dd.MM.yyyy HH:mm"));
                            Console.WriteLine("\tПродолжительность полета: {0} часов", shd.durationOfFlight);
                            Console.WriteLine("\tКоличество свободных мест: {0}", shd.freePlaces);

                            fs.Close();
                            break;
                        }
                }
            }
        }
    }
}


Но тут каждое новое добавление стирает то что уже добавлено. Как сделать добавление с существующему и потом вывести все что есть на экран консоли?

Спасибо за помощь!
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 2
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
FileMode.OpenOrCreate
Нужно FileMode.Append
https://msdn.microsoft.com/ru-ru/library/system.io...
fs.Seek(0, SeekOrigin.Begin);
Зачем?
fs.Close();
Зачем если дальше еще с файлом работаем?
shd = (Schedule)bf.Deserialize(fs);
Зачем, если в shd уже все есть?
Ответ написан
@mefutu
Есть небольшая фича, если не получается добавить в конец файла новый объект. Воспользуйтесь классом
List<Schedule> schedules;
1.Перед добавлением можете прочитать весь файл и записать в schedules.
2.Добавить новый объект в schedules.Add(new Schedules())
3. Серилизовать и сохранять уже List<Schedules>

Такой подход не желателен если у вас будет очень большой файл. Но при таком подходе вас уже не будет волновать, что вы не можете добавить в конец файла новый объект...

P.S немного про сериализацию тут
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы