Всем доброго времени суток.По заданию нужно создать класс с полями и массив-контецнер,куда по индексаторам поместить некоторые эти поля,затем записать поле и массив-контейнер в бинарный файл,считать поле и массив оттуда и вывести на консоль.В моём случае полем для записи является массив 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();
//работал с консолью для самопроверки,это не нужно
}
}
}