Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2012, 20:02   #1
GreatTalker
Новичок
Джуниор
 
Регистрация: 08.04.2012
Сообщений: 1
Вопрос Сериализация: как прочитать записанное(С#)

Всем доброго времени суток.По заданию нужно создать класс с полями и массив-контецнер,куда по индексаторам поместить некоторые эти поля,затем записать поле и массив-контейнер в бинарный файл,считать поле и массив оттуда и вывести на консоль.В моём случае полем для записи является массив jets класса Plain,а контейнером является массив a класса Plains.Я записал их в бинарный файл,а считать что-то не получается.Помогите,пожалуйста.Код:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;//библиотека для сериализации
 
namespace LabOOP5
{
    [Serializable]
    class Plain
    {
        public int PlNum;//порядковый номер самолёта
        public int FlLen;//дальность полёта самолёта
        private int n=10;
        public static string[] jets = new string[4] { "Airbus А380", "Boeing 757", "An-24", "Il-86" };//поле массив
        public string jet;
        public Plain(int PlNum, int FlLen)//перегруженный метод
        {
            this.PlNum = PlNum;//задаём индексаторы для будущего массива
            this.FlLen = FlLen*n;
            for (int i = 0; i < 4; i++)
            {
                if (PlNum == i + 1)//условие для индексаторов
                    this.jet = jets[i];
            }
           
        }
 
    }
    [Serializable]//позволяет сохранять текущее состояние полей для записи
    class Plains 
    {
        Plain[] Plains1 = new Plain[4];//объявление массива-контейнера
        public Plain this[int pos]
        {
            get
            {
                if (pos >= 0 || pos < 4) return Plains1[pos];
                else throw new IndexOutOfRangeException("Вне диапазона!");//обработка исклечений
            }
            set { Plains1[pos] = value; }//задаем значения массива-контейнера
        }
 
    }
   
    class Executer
    {
        [STAThread]
        static void Main()//точка входа
        {
            Plains a = new Plains();//объект а-массив-контейнер 
            a[0] = new Plain(1, 2500);//заполнение массива
            a[1] = new Plain(2, 4000);
            a[2] = new Plain(3, 7000);
            a[3] = new Plain(4, 12000);
            int n = 4;
            FileStream fs;//объявление потока
            fs = new FileStream("Plain.bin", FileMode.Create, FileAccess.Write);//открытие потока создание файла,режим записи
            BinaryFormatter sw = new BinaryFormatter();//конвертер для преобразования в бинарный формат
            for (int i = 0; i < n; i++)
            {
                sw.Serialize(fs, Plain.jets[i]);//запись массива-поля jets из класса Plain
            }
            for (int i = 0; i < n; i++)
            {
                sw.Serialize(fs, a[i].PlNum + a[i].FlLen + a[i].jet);//запись данных массива-контейнера а класса Plains
            }
            fs.Close();//закрытие потока
 
            fs = new FileStream("Plain.bin", FileMode.Open, FileAccess.Read);//открытие потока
            long m=0, j = fs.Length;//j-длина потока
 
            while (m < j)//считывание побайтно
            {
                for (int i = 0; i < n; i++)
                {
                    Plain.jets[i] = Convert.ToString((Plain)sw.Deserialize(fs));//пытался считать массив jets класса Plain,пишет Не удалось привести тип объекта "System.String" к типу "LabOOP5.Plain".
                    Console.WriteLine(jets[i]);
                }
                //как считать данные из массива-контейнера a?
                m++;//счетчик для считывания
            }
 
            fs.Close();//закрытие потока
            //работал с консолью для самопроверки,это не нужно
            Console.WriteLine("Plain Models:");
             for (int i = 0; i < n; i++)
            {
                 Console.WriteLine(Plain.jets[i]);
             }
            Console.WriteLine("Available plains:");
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("Номер самолёта:" + a[i].PlNum + " Пробег в полёте:" + a[i].FlLen + "km " + "Марка:" + a[i].jet);
            }
            Console.ReadLine();
            //работал с консолью для самопроверки,это не нужно
        }
    }
}
GreatTalker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Please!!! Как определить тактовою частоту процессора, и как прочитать текущее состояние счетчика тактов. Заранее спасибо Dem_v Общие вопросы Delphi 1 17.09.2011 13:44
как прочитать pdf? KANDRAT PHP 2 27.02.2011 07:19
как это сделать правильно?(сериализация) ZigaZaga Общие вопросы по Java, Java SE, Kotlin 5 28.09.2010 05:14
Как прочитать файл?) TwiX Общие вопросы C/C++ 2 13.09.2009 22:55
записанное в Edit сохранить после закрытия IVANSour Общие вопросы Delphi 6 21.01.2009 03:33