Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
 Аватар для CheshireesCat
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766

Как сохранить список в бинарный файл, и затем прочитать его из файла?

25.04.2016, 09:43. Показов 7709. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как сохранить список в бинарный файл, и затем прочитать его из файла???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2016, 09:43
Ответы с готовыми решениями:

Как прочитать exe файл, а затем сохранить его?
подскажите как прочитать exe файл, затем хранить его как некий набор символов, а затем восстановить файл из этих данных пробовал...

Как сохранить\прочитать контейнер в бинарный файл
ostream_iterator<string, char> out(cout, "\n"); set<string> mat; set<string> pat; string temp; cout << "Input Mat's...

Данные записать в файл F1.txt, затем прочитать оттуда, обрабатывались и записывались в бинарный файл F2.bin с проверкой
Никак не получается отладить в BC++ 3.1. Как сделать в классах так, чтобы введённые данные записывались в файл F1.txt, затем читались...

7
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
25.04.2016, 09:47
Лучший ответ Сообщение было отмечено CheshireesCat как решение

Решение

http://www.dotnetperls.com/serialize-list
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
25.04.2016, 10:05
Лучший ответ Сообщение было отмечено CheshireesCat как решение

Решение

Пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[Serializable]
class Data
{
    public int ID { set; get; }
    public string FIO { set; get; }
    public Data(int id, string fio)
    {
        ID = id;
        FIO = fio;
    }
}
 
class DataList
{
    List<Data> list;
    public DataList()
    {
        list = new List<Data>();
    }
    public void Add(Data data)
    {
        list.Add(data);
    }
    public void Save(string fileName)
    {
        BinaryFormatter bf = new BinaryFormatter();
        using (Stream writer = new FileStream(fileName, FileMode.Create))
        {
            bf.Serialize(writer, list);
        }
    }
    public void Load(string fileName)
    {
        BinaryFormatter bf = new BinaryFormatter();
        using (Stream reader = new FileStream(fileName, FileMode.Open))
        {
            list = (List<Data>)bf.Deserialize(reader);
        }
    }
 
}
Использование:
C#
1
2
3
4
5
6
7
8
9
DataList dl = new DataList();
dl.Add(new Data(1, "dfgbsg"));
dl.Add(new Data(2, "tyjdtyhj"));
dl.Add(new Data(3, "ftyjfjhf"));
dl.Add(new Data(4, "hkhjkgh"));
dl.Save(@"d:\1.bin");
 
DataList dl2 = new DataList();
dl2.Load(@"d:\1.bin");
1
 Аватар для CheshireesCat
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
25.04.2016, 10:32  [ТС]
Даценд,
Сохранить как:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (w.Count == 0) { MessageBox.Show("Чтобы что то сохранить необходимо это  "что что" сначала создать!", "Ошибка сохранения", MessageBoxButtons.OK); return; }
            
            saveFileDialog1.Filter = "Файл рассписания|*.chr";
            saveFileDialog1.Title = "Сохранить файл рассписания как:";
            saveFileDialog1.FileName = ""; 
            saveFileDialog1.ShowDialog();
            if (saveFileDialog1.FileName != "") 
            {
                try
                {
                    BinaryFormatter bin = new BinaryFormatter();
                    Path = saveFileDialog1.FileName;
                    using (Stream writer = new FileStream(saveFileDialog1.FileName, FileMode.Create))
                    {
                        bin.Serialize(writer, w);
                    }
                }
                catch (IOException) 
                { 
                    MessageBox.Show("Сохранение не удалось :(", "Ошибка сохранения", MessageBoxButtons.OK);
                }
            }
        }

классы:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class Para_
{
    private int para_number;        //Номер пары
    private string para_name;       //Название предмета
    private int room_number;        //Номер кабинета
    private string teacher_name;    //Имя преподавателя 
    private int group_;
    public Para_()
    {
        para_number = -1;
        para_name = "";
        room_number = -1;
        teacher_name = "";
        group_ = -1;
    }
    public void SetData(int n, string name_, int r, string p, int g)
    {
        para_number = n;
        para_name = name_;
        room_number = r;
        teacher_name = p;
        group_ = g;
    }
    public string GetLine()
    {
        if (room_number != -1)
        {
            return "Группа: " + group_.ToString() + "\n" + "Пара № " + para_number.ToString() + "\n" +
                   "Пара: " + para_name + "\n" + "Преподаватель: " + teacher_name + "\n" + "Кабинет №" + room_number.ToString() + "\n";
        }
        else return "";
    }
    public int GetPNum() { return para_number; }
    public int GetGroup() { return group_; }
    public void SetGroup(int g) { group_ = g; }
    public string GetPName(){return para_name;}
    public string GetTName(){return teacher_name;}
    public int GetRoom() { return room_number; }
}
class Day_
{
    public Para_[] day_ = new Para_[8];
    public Day_(int g) 
    {
        for (int i = 0; i < 8; i++)
        {
            Para_ _day = new Para_();
            day_[i] = _day;
        }
    }
}
class Week_
{
    public Day_[] week = new Day_[5];
    public Week_(int g)
    {
        for (int i = 0; i < 5; i++)
        {
            Day_ week_ = new Day_(g);
            week[i] = week_;
        }
    }
}

C#
1
List<Week_> w = new List<Week_>();
сохрание должно выполняться только если w не пустой
что я и сделал первой же проверкой, но
мне выделяет строку:
Code
1
 bin.Serialize(writer, w);
и пишет
Code
1
2
3
Необработанное исключение типа "System.Runtime.Serialization.SerializationException" в mscorlib.dll
 
Дополнительные сведения: Тип "Week_" в сборке "WindowsFormsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" не помечен как сериализуемый.
Добавлено через 58 секунд
может я чего не указал?

Добавлено через 15 секунд
в using*

Добавлено через 15 секунд
C#
1
2
3
4
5
6
7
8
9
10
11
12
using System;
using System.Collections;//ArrayList
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
25.04.2016, 10:36
Вам же пример показали, и ошибка говорит сама за себя, что нет атрибута Serializable.
0
 Аватар для CheshireesCat
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
25.04.2016, 10:42  [ТС]
Цитата Сообщение от maxillion Посмотреть сообщение
Вам же пример показали, и ошибка говорит сама за себя, что нет атрибута Serializable.
ага мне показали пример, я благодарен
P.S.: мне и первого было достаточно, я с ним сделал и получил такую же ошибку.
А теперь мой дорогой друг maxillion, если можешь подсказать как мне "Пометить тип "Week_" в сборке "WindowsFormsApplication1" как сериализуемый.", был признателен, а если нет, так и нечего тут на других ссылаться.
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
25.04.2016, 10:48
Что там сложного, просто у каждого класса добавляешь атрибут и все
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
[Serializable]
class Para_
{
    private int para_number;        //Номер пары
    private string para_name;       //Название предмета
    private int room_number;        //Номер кабинета
    private string teacher_name;    //Имя преподавателя 
    private int group_;
    public Para_()
    {
        para_number = -1;
        para_name = "";
        room_number = -1;
        teacher_name = "";
        group_ = -1;
    }
    public void SetData(int n, string name_, int r, string p, int g)
    {
        para_number = n;
        para_name = name_;
        room_number = r;
        teacher_name = p;
        group_ = g;
    }
    public string GetLine()
    {
        if (room_number != -1)
        {
            return "Группа: " + group_.ToString() + "\n" + "Пара № " + para_number.ToString() + "\n" +
                   "Пара: " + para_name + "\n" + "Преподаватель: " + teacher_name + "\n" + "Кабинет №" + room_number.ToString() + "\n";
        }
        else return "";
    }
    public int GetPNum() { return para_number; }
    public int GetGroup() { return group_; }
    public void SetGroup(int g) { group_ = g; }
    public string GetPName() { return para_name; }
    public string GetTName() { return teacher_name; }
    public int GetRoom() { return room_number; }
}
[Serializable]
class Day_
{
    public Para_[] day_ = new Para_[8];
    public Day_(int g)
    {
        for (int i = 0; i < 8; i++)
        {
            Para_ _day = new Para_();
            day_[i] = _day;
        }
    }
}
[Serializable]
class Week_
{
    public Day_[] week = new Day_[5];
    public Week_(int g)
    {
        for (int i = 0; i < 5; i++)
        {
            Day_ week_ = new Day_(g);
            week[i] = week_;
        }
    }
}
0
 Аватар для CheshireesCat
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
25.04.2016, 10:55  [ТС]
Всё, разобрался, спасибо:Даценд, и MSDN
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2016, 10:55
Помогаю со студенческими работами здесь

Сохранить список массивов в стрим и затем при необходимости прочитать нужный элемент
Хочу сохранить список массивов в стрим и затем при необходимости прочитать нужную элемент(Суть простоя. Данные хранятся в TreeView и...

Программка должна сохранить параметры настроек в ini-файл, а затем их прочитать
Народ, помогите &quot;чайнику&quot;... Тема эта &quot;избитая&quot;, но решения так и не могу найти. Второй день бьюсь... Программка должна сохранить...

Как сохранить контейнеры STL в файл. И как потом их прочитать из файла
В Qt такой контейнер как map&lt;T,T&gt; библиотеки STL заносится в файл занесением в поток &quot;&lt;&lt;map;&quot; , а как это можно сделать в...

Записать информационную часть списка в бинарный файл, и прочитать его
Подскажите, как записать информационную часть измененного списка в бинарный файл и прочитать его? #include &quot;stdafx.h&quot; ...

Как сохранить table после random_shuffle в файл и перед расшифровкой прочитать ключ из файла
#include &lt;iostream&gt; #include &lt;array&gt; #include &lt;string&gt; #include &lt;algorithm&gt; #include &lt;Windows.h&gt; using namespace std; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru