Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > BinaryFormatter append


Автор: mrgloom 8.7.2013, 14:31
Код

            for (int i = 0; i < 3; ++i)
            {
                List<int> tl = new List<int>();
                tl.Add(5);
                tl.Add(4);
                using (var fileStream = new FileStream(@"C:\file.dat", FileMode.Append))
                {
                    var bFormatter = new BinaryFormatter();
                    bFormatter.Serialize(fileStream, tl);
                    //fileStream.Close();
                }

                var list = new List<int>();

                using (var fileStream = new FileStream(@"C:\file.dat", FileMode.Open))
                {
                    var bFormatter = new BinaryFormatter();
                    //while (fileStream.Position != fileStream.Length)
                    //{
                    //     list.Add((int)bFormatter.Deserialize(fileStream));
                    //}
                    list = (List<int>)bFormatter.Deserialize(fileStream);
                    //fileStream.Close();
                }
            }


почему не происходит append данных?

Автор: mihryak 8.7.2013, 16:15
выставь правильную позицию перед сериализацией: fileStream.Position = fileSize;

только работать так, как ты этого хочешь, не будет всё равно, мне кажется
форматтер должен ещё записать метаинформацию о сериализуемом типе, так что десериализовать в один больший лист не получится
если нужно записывать и читать инты, записывай просто байты вместо сериализации листов

Автор: mrgloom 9.7.2013, 09:11
в итоге так работает
Код


var list = new List<int>();

        using (var fileStream = new FileStream(@"C:\file.dat", FileMode.Open))
        {
            var bFormatter = new BinaryFormatter();
            while (fileStream.Position != fileStream.Length)
            {
                var t = (List<int>)(bFormatter.Deserialize(fileStream));
                list.AddRange(t);
            }
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)