1 / 1 / 0
Регистрация: 08.05.2012
Сообщений: 9
1

Сохранение данных из List<> в файл и обратная операция

04.12.2012, 19:59. Показов 25596. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я записал в файл информацию с помощью List<>
Мне надо из файла, информацию, которую я записал, вывести опять в List<>, который использует поля в классе R.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace list
{
    class R
    {
        public string r_n;
        public string s_p;
        public string i;
        public Recept(string r_n, string s_p, string i)
        {
            this.r_n = r_n;
            this.s_p = s_p;
            this.i = i;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            string path = "C:\\Kurs\\new.txt";
 
            var list = new List<R>();
            list = new List<R>();
            R sp;
            Console.WriteLine("Input recept name:");
            string r = Console.ReadLine();
            Console.WriteLine("Input sposob prigotovlenya:");
            string s = Console.ReadLine();
            Console.WriteLine("Input ingredients:");
            string i = Console.ReadLine();
            sp = new Recept(r, s, i);
            list.Add(new Recept(r, s, i));
           
            StreamWriter sw;
            FileInfo fi = new FileInfo(path);
            sw = fi.AppendText();
            foreach (Recept lists in list)
            {
                sw.WriteLine(lists.r_n);
                sw.WriteLine(lists.s_p);
                sw.WriteLine(lists.i);
            }
            sw.Close();
 
 
            StreamReader file = new StreamReader(path);
            //дальше код, который записывает данные из текстового файла в List<>
 
            Console.ReadLine();
 
 
           
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2012, 19:59
Ответы с готовыми решениями:

Запись в файл кликов мыши. Обратная операция
Помогите, как изменить этот код так чтобы он еще и клики записывал в текстовой документ и...

Объединение ячеек без потери данных и обратная операция
Привет всем . Помогите разобратся с проблемкой! Я создал свою фому: на ней есть textbox1,...

Сохранение canvas или List<> в файл
Есть графический редактор. Есть DrawingCanvas, который наследовал от Canvas. ...

Сохранение данных из List<string> в txt
многопоточный парсер html. данные парсятся регулярными выражениями и заносятся в List &lt;string&gt;....

4
Не осилил Linux
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
05.12.2012, 12:51 2
не изобретай велосипед.
то что ты пытаешься сделать, называется сериализация, и давно реализовано за тебя.
пример
1
1 / 1 / 0
Регистрация: 08.05.2012
Сообщений: 9
06.12.2012, 00:11  [ТС] 3
А как в сериализацию добавить несколько объектов?
Вот код:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
 
namespace ConsoleApplication1
{
    [Serializable]
    class Recept
    {
        public string recept_name, sposob_prigotovleniya, inredients;
        public Recept(string recept_name, string sposob_prigotovleniya, string inredients)
        {
            this.recept_name = recept_name;
            this.sposob_prigotovleniya = sposob_prigotovleniya;
            this.inredients = inredients;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"C:\Kurs\new.txt";
            
                List<Recept> listser = new List<Recept>();
                Recept recept;
                Console.WriteLine("Input recept name:");
                string receptname = Console.ReadLine();
                Console.WriteLine("Input sposob prigotovlenya:");
                string sposobpr = Console.ReadLine();
                Console.WriteLine("Input ingredients:");
                string ingredients = Console.ReadLine();
                recept = new Recept(receptname, sposobpr, ingredients);
                listser.Add(recept);
 
                FileStream fsser = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
                BinaryFormatter bfser = new BinaryFormatter();
                bfser.Serialize(fsser, listser);
                fsser.Close();
 
                List<Recept> listdis;
                FileStream fsdis = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
                BinaryFormatter bfdis = new BinaryFormatter();
                listdis = (List<Recept>)bfdis.Deserialize(fsdis);
                fsdis.Close();
 
                foreach (Recept w in listdis)
                {
                    Console.WriteLine(w.recept_name);
                }
                Console.ReadLine();
        }
    }
}
Мне нужно что бы пользователь ввел данные, они сериализовались, потом что то типо Consol.WriteLine("Хотите добавить еще"), если да, то записываем в этот же файл еще раз. Если нет, то переходим к дисериализации.
И еще один вопрос, вот мы создали 3 таких объекта, содержащих в себе 3 поля, как например обратиться, что бы на консоль вывелась информация трех объектов, только первых полей(в данном случае, это поле recept_name)

Добавлено через 19 минут
Запись нескольких объектов вроде сделал, заменив FileMode.OpenorCreat на FileMode.Append.
Но все же остается вопрос, как считать первые поля у нескольких объектов...?
0
14 / 14 / 6
Регистрация: 26.11.2010
Сообщений: 235
06.12.2012, 00:28 4
имя_списка[index].имя_поля, нет?
0
1 / 1 / 0
Регистрация: 08.05.2012
Сообщений: 9
06.12.2012, 07:47  [ТС] 5
C#
1
2
3
4
5
6
7
8
9
                List<Recept> listdis;
                FileStream fsdis = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
                BinaryFormatter bfdis = new BinaryFormatter();
                listdis = (List<Recept>)bfdis.Deserialize(fsdis);
                fsdis.Close();
                for (int i = 0; i < listdis.Count(); i++)
                {
                    Console.WriteLine(listdis[i].recept_name);
                }
записал такой код, выводит только первый элемент ...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2012, 07:47
Помогаю со студенческими работами здесь

Сохранение List в текстовый файл и загрузка из текстового файла
Подскажите как реализовать сохранение List в текстовый файл и загрузка из текстового файла ...

Сохранение данных пользовательского типа в list из stl
Здравствуйте. Пишу программу реализации списка. #include &lt;iostream&gt; #include &lt;iterator&gt;...

Хеширование строки и обратная операция
Добрый день! Есть строка, состоящая из слов и цифр. Мне нужно получить зашифрованную строку,...

Операция обратная Encoding.GetBytes()
string str = &quot;21&quot;; byte send2 = Encoding.ASCII.GetBytes(str); Console.Write(send2); Выводит...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru