Сериализация и десериализация - C# (217495)

Узнай цену своей работы

Формулировка задачи:

Есть класс:
[Serializable]
    public class FilesData : ISerializable //класс, содержащий файлы
    {
        [Serializable]
        public struct fi
        {
            public string name;
            public byte[] data;
        }
        public readonly int count = 0;
        //public readonly byte[][] data;
        public fi[] dataFi;

        public FilesData() { }
        public FilesData(string[] str)
        {
            count = str.Length;
            fi[] K = new fi[count];
            foreach (string s in str)
            {
                count--;
                FileStream A = new FileStream(s, FileMode.Open, FileAccess.Read);
                BufferedStream B = new BufferedStream(A);
                K[count].name = s;
                K[count].data = new byte[B.Length];
                B.Read(K[count].data, 0, (int)B.Length);
                B.Close(); A.Close();
            }
            dataFi = K;
        }
        public void GetObjectData(SerializationInfo si, StreamingContext ctx)
        {
            si.AddValue("Files", dataFi);
        }
        private FilesData(SerializationInfo si, StreamingContext ctx)
        {
            dataFi = (fi[])si.GetValue("Files", dataFi.GetType());
        }

    }
класс работает, сохраняет файлы. Далее я делаю сериализацию его:
string[] G = new string[2] { "D:\\!!!\\dataopen.bat", "D:\\!!!\\tym.mpf" };
            FilesData fil = new FilesData(G);
            Stream toFile = File.Create("D:\\!!!\\tofile.dat");
            BinaryFormatter toData = new BinaryFormatter();
            toData.Serialize(toFile, fil);
            toFile.Close();
потом пытаюсь десериализовать его:
toFile = File.OpenRead("D:\\!!!\\tofile.dat");
            FilesData filFromFile = (FilesData)toData.Deserialize(toFile);
Все запускается, сериализация проходит успешно, но при десериализации во второй строке ругается на то, что "Адресат вызова создал исключение." В чем ошибка? Как правильно сделать?

Решение задачи: «Сериализация и десериализация»

textual
Листинг программы
 FileStream fs;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5
Похожие ответы