Мишка Косолапый :)
284 / 254 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
1

Сохранение массива структур

04.10.2015, 12:06. Показов 483. Ответов 4
Метки нет (Все метки)

У меня есть Класс Users, в нём массив структур. В структуре планируется около 30 разных полей, может быть и больше. Поля типа string, int, float, bool. Ну bool не обязательно, могу заменить на int, со значениями 0 и 1.
Необходимо при выходе из программы сохранить этот массив, а при старте программы загружать всё обратно. Подскажите как это сделать?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    class Users
    {
        public struct user
        {
            public string id;
            public string nick;
            public int money;
            public float timeWork;
        }
 
        public user[] arrayUser = new user[100];
 
      // тут разные методы изменения полей в arrayUser.
 
    }
Вместо Users users = new Users(); нужно что то вроде этого: Users users = loadUsers();
Ну и при выходе что то вроде saveUsers();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2015, 12:06
Ответы с готовыми решениями:

В чем отличие массива структур от массива объектов. С примером покажите наглядным
В чем отличие массива структур от массива объектов. С примером покажите наглядным

Заполнение массива структур
Добрый день! Имеется структура: public struct st { public int m_num; ...

Инициализация массива структур
суть в чем. есть структура SS полем которой является матрица S. есть массив x - содержащий 8...

Сортировка массива структур
Есть структура, потом создается arraylist структур. struct ExpertMark { public int...

4
Фрилансер
735 / 349 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
04.10.2015, 12:50 2
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
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Serialization;
 
namespace ConsoleApplication15
{
    [XmlRoot("Users")]
    public class Users
    {
        public struct user
        {
            public string id;
            public string nick;
            public int money;
            public float timeWork;
            public override string ToString()
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("id : {0} \r\n nick : {1} \r\n money : {2} \r\n timeWork : {3}  \r\n", id, nick, money, timeWork);
                return sb.ToString();
            }
        }
        [XmlElement("user")]
        public user[] arrayUser = new user[100];
 
        public static Users LoadData(string path)
        {
            try
            {
                XmlSerializer formatter = new XmlSerializer(typeof(Users));
                using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
                {
                    Users users = (Users)formatter.Deserialize(fs);
                    return users;
                }
            }
            catch
            {
                //обработать что-то
                return null;
            }
        }
 
        public static void SaveData(string path, Users data)
        {
            try
            {
                XmlSerializer formatter = new XmlSerializer(typeof(Users));
                using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
                {
                    formatter.Serialize(fs, data);
                }
            }
            catch
            {
                //обработать что-то
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Users users = Users.LoadData("data.xml");
            foreach (var u in users.arrayUser)
            {
                Console.WriteLine(u);
            }
 
            Users.SaveData("data1.xml", users);
            Console.ReadLine();
        }
    }
}
2
Мишка Косолапый :)
284 / 254 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
04.10.2015, 13:47  [ТС] 3
А как то можно так, чтобы не указывать эту строку?
C#
1
sb.AppendFormat("id : {0} \r\n nick : {1} \r\n money : {2} \r\n timeWork : {3}  \r\n", id, nick, money, timeWork);
Чтобы все все сохраняло, что там есть.
0
Фрилансер
735 / 349 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
04.10.2015, 13:54 4
можно метод
C#
1
2
3
4
5
6
            public override string ToString()
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("id : {0} \r\n nick : {1} \r\n money : {2} \r\n timeWork : {3}  \r\n", id, nick, money, timeWork);
                return sb.ToString();
            }
удалить полностью он нужен только здесь:
C#
1
2
3
4
            foreach (var u in users.arrayUser)
            {
                Console.WriteLine(u);
            }
1
Мишка Косолапый :)
284 / 254 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
04.10.2015, 15:15  [ТС] 5
Почему то отказывается работать.
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
namespace alex_ey
{
    [XmlRoot("Users")]
    class Users
    {
        public struct user
        {
            public string id;
            public string nick;
            public int money;
            public int goldMoney;
            public string timeWork;
            public int attack;
            public int def;
            public int uklon;
            public int koef;
        }
 
        [XmlElement("user")]
        public user[] arrayUser = new user[100];
 
        public static Users LoadData(string path)
        {
            try
            {
                XmlSerializer formatter = new XmlSerializer(typeof(Users));
                using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
                {
                    Users users = (Users)formatter.Deserialize(fs);
                    return users;
                }
            }
            catch
            {
                //обработать что-то
                return new Users();
            }
        }
 
        public static void SaveData(string path, Users data)
        {
            try
            {
                XmlSerializer formatter = new XmlSerializer(typeof(Users));
                using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
                {
                    formatter.Serialize(fs, data);
                }
            }
            catch
            {
                //обработать что-то
            }
        }
C#
1
2
3
4
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Users.SaveData("C:\\data.xml", users);
        }
файл не создаётся.

Добавлено через 4 минуты
В SaveData вызывается исключение.
Строка XmlSerializer formatter = new XmlSerializer(typeof(Users)); не вызывается.

Добавлено через 10 минут
Понял почему. Класс нужно было сделать public. И всё заработало.
Спасибо Вам!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2015, 15:15

Сортировка массива структур
Описать структуру с именем STUDENT, содержащую следующие поля: □ фамилия и инициалы;...

Реализовать сортировку массива структур
В общем, есть массив структур(список студентов, их группа и оценки) и нужно реализовать сортировку...

Передача массива структур по сети
Добрый вечер. Подскажите,пожалуйста,как можно передать массив структур по сети (через сокеты).Одну...

Создание многомерного массива-структур
Нужно создать и сразу заполнить массив-структур 20-6(6-строк, 20-столбцов) Например, структура:...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.