powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сохранение трехмерной таблицы
12 сообщений из 12, страница 1 из 1
Сохранение трехмерной таблицы
    #40038807
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Написал приложение, которое на форме отображает выгруженное изображение. И если мышкой нажать на изображение, то получаем фрагмент изображения в зависимости от координат. Каждый фрагмент, который имеет двумерную таблицу преобразовывается в одномерную и записывает в List. Потом нажимаем на кнопку и данные сохраняются в двух csv-файл: с оттенками серого (двумерная таблица) и с RGB (трехмерная таблица). Наподобие MNIST. Эти данные потом будут выгружаться и обрабатываться на Python.

На форме присутствуют элементы Button и PictureBox.
C#
Код: 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.
using System;
namespace ColorTest
{    
    //Для одного канала - оттенки серого
    public class Data_ForGrayscale
    {
        public Int32 Marker { get; set; }
        public Int32[] Grayscale { get; set; }

        public Data_ForGrayscale(Int32 size)
        {
            Grayscale = new Int32[size];

            for (int i = 0; i < size; i++)
            {
                Grayscale = new Int32();
            }
        }
    }

    //Для трех каналов - RGB
    public class Data_ForRGB
    {
        public ColorRGB[] ColorRGB { get; set; }

        public Int32 Marker { get; set; }        

        public Data_ForRGB(Int32 size)
        {
            ColorRGB = new ColorRGB[size];

            for (int i = 0; i < size; i++)
            {
                ColorRGB[i] = new ColorRGB();
            }
        }
    }
    public class ColorRGB
    {
        public Int32 ColorR { get; set; }
        public Int32 ColorG { get; set; }
        public Int32 ColorB { get; set; }        
    }
}

C#
Код: 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.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
using CsvHelper;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace ColorTest
{
    public partial class Form1 : Form
    {
        Image image; //Изображение
        Int32 WidthPicture = 6;  //Ширина фрагмента картинки
        Int32 HeightPicture = 6; //Высота фрагмента картинки

        List<Data_ForGrayscale> List_data_ForGrayscale; // List для данных с оттенками серого
        List<Data_ForRGB> List_data_ForRGB; //List для данных с RGB        

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            image = Image.FromFile("C:\\Users\\Acer\\Desktop\\image1.jpg");
            pictureBox1.Image = image;

            List_data_ForGrayscale = new List<Data_ForGrayscale>();
            List_data_ForRGB = new List<Data_ForRGB>();
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {

            if (e.X - WidthPicture/2 >= 0 &&                //Чтобы не выходили за край PictureBox
                e.Y - HeightPicture/2 >= 0 &&               // с учетом ширины и высоты фрагмента
                e.X + WidthPicture/2 < pictureBox1.Width && //
                e.Y + HeightPicture/2 < pictureBox1.Height) //
            {
                Data_ForGrayscale CurrentData_ForGrayscale = new Data_ForGrayscale(WidthPicture * HeightPicture);
                Data_ForRGB CurrentData_ForRGB = new Data_ForRGB(WidthPicture * HeightPicture);

                Rectangle cloneRect = new Rectangle((int)e.X - WidthPicture/2,
                                                    (int)e.Y - HeightPicture/2,
                                                    WidthPicture,
                                                    HeightPicture);                

                Bitmap myBitmap = new Bitmap(image);
                PixelFormat pixelformat = myBitmap.PixelFormat;
                Bitmap cloneBitmap = myBitmap.Clone(cloneRect, pixelformat); //Получаем фрагмент

                Color pixelColor;

                int numberPixel = -1;

                for (int i = 0; i < WidthPicture; i++)
                {
                    for (int j = 0; j < HeightPicture; j++)
                    {
                        pixelColor = cloneBitmap.GetPixel(i, j);

                        numberPixel = numberPixel + 1;
                        CurrentData_ForGrayscale.Grayscale[numberPixel] = 255 - Convert.ToInt32(pixelColor.R * 0.2126 + 
                                                                                                pixelColor.G * 0.7152 + 
                                                                                                pixelColor.B * 0.0722);
                        CurrentData_ForGrayscale.Marker = 1;
                        
                        CurrentData_ForRGB.ColorRGB[numberPixel].ColorR = pixelColor.R;
                        CurrentData_ForRGB.ColorRGB[numberPixel].ColorG = pixelColor.G;
                        CurrentData_ForRGB.ColorRGB[numberPixel].ColorB = pixelColor.B;
                        CurrentData_ForRGB.Marker = 1;
                    }
                }

                List_data_ForGrayscale.Add(CurrentData_ForGrayscale);
                List_data_ForRGB.Add(CurrentData_ForRGB);
            }

        }

        private void button_Save_Click(object sender, EventArgs e)
        {
            //Сохраняем в CSV-файл с оттенками серого
            string pathCsvFileForGrayscale = "C:\\Users\\Acer\\Desktop\\Marker1.csv";            

            using (StreamWriter streamReader = new StreamWriter(pathCsvFileForGrayscale, true))
            {
                using (CsvWriter csvReader = new CsvWriter(streamReader))                
                {
                    csvReader.Configuration.HasHeaderRecord = false;
                    //csvReader.Flush();                    
                    csvReader.Configuration.Delimiter = ",";                    
                    for (int i = 0; i < List_data_ForGrayscale.Count; i++)
                    {
                        csvReader.WriteField(List_data_ForGrayscale[i].Marker);

                        for (int j = 0; j < List_data_ForGrayscale[i].Grayscale.Length; j++)
                        {
                            csvReader.WriteField(List_data_ForGrayscale[i].Grayscale[j]);
                        }
                        csvReader.NextRecord();
                    }
                }
            }

            List_data_ForGrayscale = new List<Data_ForGrayscale>();

            //Сохраняем в CSV-файл с RGB
            string pathCsvFileForGRB = "C:\\Users\\Acer\\Desktop\\Marker2.csv";

            using (StreamWriter streamReader = new StreamWriter(pathCsvFileForGRB, true))
            {
                using (CsvWriter csvReader = new CsvWriter(streamReader))
                {
                    csvReader.Configuration.HasHeaderRecord = false;                    
                    //csvReader.Flush();                    
                    csvReader.Configuration.Delimiter = ",";
                    for (int i = 0; i < List_data_ForRGB.Count; i++)
                    {
                        csvReader.WriteField(List_data_ForRGB[i].Marker);

                        for (int j = 0; j < List_data_ForRGB[i].ColorRGB.Length; j++)
                        {
                            var colorRGB= List_data_ForRGB[i].ColorRGB[j];                            
                            var output = "[" +
                                                colorRGB.ColorR.ToString() + ";" + 
                                                colorRGB.ColorG.ToString() + ";" + 
                                                colorRGB.ColorB.ToString() + "]";
                            csvReader.WriteField(output);
                        }
                        csvReader.NextRecord();
                    }                    
                }
                List_data_ForRGB = new List<Data_ForRGB>();
            }
        }        
    }

Используется библиотека CsvHelper версии 12.0.0.

Сохранение с двумерной таблицей нормально. Для трехмерной таблицы в одну ячейку записывается массив их трех чисел как текст. В результате сохраняет. См. скриншот. Но сомневаюсь, что это хорошее решение.

Скажите:

1. Как можно написать, чтоб в CSV-файл сохранялись данные из трех чисел в одну ячейку наиболее правильным образом?

2. [i]pixelColor
помимо цветом R , G и B возвращает и A . Насколько корректно получать цвета, игнорируя A ?

3. Какие наиболее предпочтительные варианты форматов сохранения данных в трехмерном виде, где последующая обработка проиcходит в Python с использованием библиотек Pandas и Numpy?

4. Есть что-то еще некорректно в коде (что-то не учитывается, лишнее, не оптимальное)?
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40038810
Colt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk,
Извините, может не по теме, но зачем вы вводите свой класс ColorRGB, а не используете штатный System.Drawing.Color ?
Кстати, как я вижу, вы переводите цвет в градацию серого, а у штатного Color есть метод GetBrightness() , который можно для этого использовать (возможно ошибаюсь, и он не совсем про это).
Насчет хранения цвета в одной ячейке, может вам посмотреть, как цвет кодируется для HTML (пример: красный "#FF0000", синий "#0000FF", больше тут )
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039154
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Colt
ferzmikk,
Извините, может не по теме, но зачем вы вводите свой класс ColorRGB, а не используете штатный System.Drawing.Color ?
Изменил.

Кстати, как я вижу, вы переводите цвет в градацию серого, а у штатного Color есть метод GetBrightness() , который можно для этого использовать (возможно ошибаюсь, и он не совсем про это).
C#
Код: 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.
using System;
using System.Drawing;

namespace ColorTest
{       
    public class Data_Color
    {
        public Color[] Color { get; set; }
        public Int32[] ColorGrayscale { get; set; }   // 255 - (R * 0.2126 + G * 0.7152 + .B * 0.0722) - изначальная формула
        public Single[] ColorGrayscaleGetBrightness { get; set; } // Используется формула GetBrightness()
        public Int32 Marker { get; set; }        

        public Data_Color(Int32 size)
        {
            this.Color = new Color[size];
            this.ColorGrayscale = new Int32[size];                        
            this.ColorGrayscaleGetBrightness = new Single[size];            

            for (int i = 0; i < size; i++)
            {
                this.Color[i] = new Color();                
            }
        }

        //Метод. Получить цвет с оттенками серого
        public void GetColorGrayscale()
        {
            for (int i = 0; i < this.ColorGrayscale.Length; i++)
            {                
                ColorGrayscale[i] = 255 - Convert.ToInt32(this.Color[i].R * 0.2126 + this.Color[i].G * 0.7152 + this.Color[i].B * 0.0722);
                ColorGrayscaleGetBrightness[i] = this.Color[i].GetBrightness();                
            }
        }        
    }
}

Код: c#
1.
2.
3.
4.
5.
6.
7.
//Изначально у меня такая формула была
ColorGrayscale = 255 - (R * 0.2126 + G * 0.7152 + .B * 0.0722)
//Теперь так
Color.GetBrightness(); 
//И похоже ближе считает так
(R * 0.2126 + G * 0.7152 + B * 0.0722)/255
//Почему ближе? Возможно выделенные коэффициенты немного другие


Насчет хранения цвета в одной ячейке, может вам посмотреть, как цвет кодируется для HTML (пример: красный "#FF0000", синий "#0000FF", больше тут )Я правильно понимаю, что количество HTML-цветов меньше, чем у RGB?


Учитывая, что мне нужны такие цвета для создания набора данных, которые потом можно будет использовать для нейронных сетей.
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039156
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати
C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
string pathCsvFileForGrayscale = "C:\\Users\\Acer\\Desktop\\Marker1.csv";            

            using (StreamWriter streamReader = new StreamWriter(pathCsvFileForGrayscale, true))
            {
                using (CsvWriter csvReader = new CsvWriter(streamReader))                
                {
                    csvReader.Configuration.HasHeaderRecord = false;
                    //csvReader.Flush();                    
                    csvReader.Configuration.Delimiter = ",";                    
                    for (int i = 0; i < List_dataColor.Count; i++)
                    {
                        csvReader.WriteField(List_dataColor[i].Marker);

                        for (int j = 0; j < List_dataColor[i].ColorGrayscaleGetBrightness.Length; j++)
                        {
                            csvReader.WriteField(List_dataColor[i].ColorGrayscaleGetBrightness[j]);
                        }
                        csvReader.NextRecord();
                    }
                }
            }

Почему-то записывает в текстовый формат. Наверно из-за того, что в числе запятая, а в CSV-файле разделение через запятую.
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039158
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
3. Какие наиболее предпочтительные варианты форматов сохранения данных в трехмерном виде, где последующая обработка проиcходит в Python с использованием библиотек Pandas и Numpy?
Я правильно понимаю, что такие данные лучше сохранять в JSON-формате? Учитывая, что количество фрагментов примерно около 5 тыс. и больше.
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039166
Colt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikkЯ правильно понимаю, что количество HTML-цветов меньше, чем у RGB?
"Именованных" - меньше, но я предлагал обратить внимание на сам подход к кодированию цвета HTML:
  • спецсимвол "#"
  • две шестнадцатеричных цифры на компонент Red (как раз будет байт на компонент, т.е. именно так он и хранится в типе Color)
  • две цифры на Green
  • две цифры на Blue
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039367
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Colt,

Предположим перевели цвета из RGB в HTML-цвета и потом обратно в RGB, то возможно потерять какие-то цвета или цвета где-то усредняются?
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039409
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ferzmikk
Colt,

Предположим перевели цвета из RGB в HTML-цвета и потом обратно в RGB, то возможно потерять какие-то цвета или цвета где-то усредняются?


Нет никаких "HTML-цветов". Есть разные способы записи цвета.

По разным причинам на устройстве вывода цвета могут отображаться не так, как задумано.
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039412
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Colt,

Предположим перевели цвета из RGB в HTML-цвета и потом обратно в RGB, то возможно потерять какие-то цвета или цвета где-то усредняются?
если RGB-цвета у тебя заданы в double от 0 до 1, то при переводе в однобайтовое представление они, естественно, потеряют точность. Другой вопрос, нужна ли тебе в твоей задаче точность выше, чем 2^24
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039427
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
многомерность, это по сути рекурсивность.
То есть, если список одномерный, то это обычный List<T>, если 2-мерный, то это List<List<T>>, если 3-мерный, то LisT<List<List<T>>>.
CSV для иерархических структур явно не подходит, а вот JSON и XML очень даже, там и проблемы с форматом хранения точки отпадут.
Вообще цвет можно хранить 1им числом,
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039429
Colt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk
Colt,

Предположим перевели цвета из RGB в HTML-цвета и потом обратно в RGB, то возможно потерять какие-то цвета или цвета где-то усредняются?

Еще раз: разговор идет не про HTML-цвета (чтобы это не значило), а про один из вариантов закодировать цвет RGB (или ARGB, если учитывать прозрачность) в строку (как один из вариантов я предложил способ кодирования, который используется в HTML).
Если в качестве исходного типа для хранения использовать тип Color (а внутри себя он хранит по байту на каждый цветовой компонент и один на прозрачность, итого 4 байта), то при кодировании в строку типа "#RRGGBB" (или "#AARRGGBB" для прозрачности) никакой информации не теряется.
...
Рейтинг: 0 / 0
Сохранение трехмерной таблицы
    #40039603
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую JSON. В классе оставляю пока два варианта: ColorGrayscale (как тип Int32) и ColorGrayscaleGetBrightness (как тип Single). И плюс еще Color (как тип Color)
C#
Код: 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.
using System;
using System.Drawing;
using System.Runtime.Serialization;

namespace ColorTest
{
    [DataContract]
    public class Data_Color
    {
        [DataMember]
        public Color[] Color { get; set; }
        [DataMember]
        public Int32[] ColorGrayscale { get; set; }   // 255 - (R * 0.2126 + G * 0.7152 + .B * 0.0722) - изначальная формула
        [DataMember]
        public Single[] ColorGrayscaleGetBrightness { get; set; } // Используется формула GetBrightness()
        [DataMember]
        public Int32 Marker { get; set; }        
                
        public Data_Color(Int32 size)
        {
            this.Color = new Color[size];
            this.ColorGrayscale = new Int32[size];                        
            this.ColorGrayscaleGetBrightness = new Single[size];            

            for (int i = 0; i < size; i++)
            {
                this.Color = new Color();                
            }
        }

        public void GetColorGrayscale()
        {
            for (int i = 0; i < this.ColorGrayscale.Length; i++)
            {                
                ColorGrayscale[i] = 255 - Convert.ToInt32(this.Color[i].R * 0.2126 + this.Color[i].G * 0.7152 + this.Color[i].B * 0.0722);
                ColorGrayscaleGetBrightness[i] = this.Color[i].GetBrightness();                
            }
        }        
    }
}

C#
Код: 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.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Runtime.Serialization.Json;

namespace ColorTest
{
    public partial class Form1 : Form
    {
        Image image; //Изображение
        Int32 WidthPicture = 6;  //Ширина фрагмента картинки
        Int32 HeightPicture = 6; //Высота фрагмента картинки

        List<Data_Color> List_dataColor; // List для данных Color        

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            image = Image.FromFile("C:\\Users\\Acer\\Desktop\\image1.jpg");
            pictureBox1.Image = image;

            List_dataColor = new List<Data_Color>();            
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {

            if (e.X - WidthPicture/2 >= 0 &&                //Чтобы не выходили за край PictureBox
                e.Y - HeightPicture/2 >= 0 &&               // с учетом ширины и высоты фрагмента
                e.X + WidthPicture/2 < pictureBox1.Width && //
                e.Y + HeightPicture/2 < pictureBox1.Height) //
            {
                Data_Color CurrentDataColor = new Data_Color(WidthPicture * HeightPicture);                

                Rectangle cloneRect = new Rectangle((int)e.X - WidthPicture/2,
                                                    (int)e.Y - HeightPicture/2,
                                                    WidthPicture,
                                                    HeightPicture);                

                Bitmap myBitmap = new Bitmap(image);
                PixelFormat pixelformat = myBitmap.PixelFormat;
                Bitmap cloneBitmap = myBitmap.Clone(cloneRect, pixelformat); //Получаем фрагмент

                Color pixelColor;

                int numberPixel = -1;

                for (int i = 0; i < WidthPicture; i++)
                {
                    for (int j = 0; j < HeightPicture; j++)
                    {
                        pixelColor = cloneBitmap.GetPixel(i, j);

                        numberPixel = numberPixel + 1;
                        CurrentDataColor.Color[numberPixel] = pixelColor;                        
                    }
                }

                CurrentDataColor.Marker = 1;
                CurrentDataColor.GetColorGrayscale();

                List_dataColor.Add(CurrentDataColor);                
            }

        }

        private void button_Save_Click(object sender, EventArgs e)
        {
            string pathjson = "C:\\Users\\Acer\\Desktop\\Marker2.json";

            var jsonFormatter = new DataContractJsonSerializer(typeof(List<Data_Color>));

            /*using (var file = new FileStream(pathjson, FileMode.Append))
            {
                jsonFormatter.WriteObject(file, List_dataColor);
            }*/

            List<Data_Color> oldList;

            try
            {
                using (var fs = new FileStream(pathjson, FileMode.Open))
                {
                    oldList = jsonFormatter.ReadObject(fs) as List<Data_Color>;
                }                
            }
            catch (Exception ex)
            {
                oldList = new List<Data_Color>();
            }

            foreach (Data_Color data_color in List_dataColor)
            {
                oldList.Add(data_color);
            }

            using (var file = new FileStream(pathjson, FileMode.OpenOrCreate))
            {
                jsonFormatter.WriteObject(file, oldList);
            }

            List_dataColor = new List<Data_Color>();
        }        
    }
}

Код работает.

1. Учитывая, что сохраняем свойство [i]Color
, то на скриншоте видим, что при загрузке на Python для первого фрагмента там присутствуют 4 поля. И если правильно понимаю, то нужное поле это value, где хранится RGB. Значение value в каком формате сохраняется? Насколько возможно сделать так, чтобы поля knownColor , name и state не сохранялись в JSON? Или тут никак и задавать тогда уж только свои нужные пользовательские свойства в классе?

2. Важно, чтобы новая запись в файл не стирал предыдущие записи, а сверху добавлял. Писал так
Код: c#
1.
2.
3.
4.
            using (var file = new FileStream(pathjson, FileMode.Append))
            {
                jsonFormatter.WriteObject(file, List_dataColor);
            }

Не заработало.

Пришлось писать так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
            List<Data_Color> oldList;

            try
            {
                using (var fs = new FileStream(pathjson, FileMode.Open))
                {
                    oldList = jsonFormatter.ReadObject(fs) as List<Data_Color>;
                }                
            }
            catch (Exception ex)
            {
                oldList = new List<Data_Color>();
            }

            foreach (Data_Color data_color in List_dataColor)
            {
                oldList.Add(data_color);
            }

            using (var file = new FileStream(pathjson, FileMode.OpenOrCreate))
            {
                jsonFormatter.WriteObject(file, oldList);
            }

Возможно ли было написать по проще?

3. Учитывая, что сначала выгружаются oldList и сверху добавляем новые значения List_dataColor . И далее дополненный oldList сохраняем в файл. Но предположим в файле 10 тысяч строк (элементов List). И по каким то причинам происходит сбой при сохранении. В итоге в оперативке потерялись данные oldList , и данные List_dataColor и еще потеряли данные в самом файле. Как тут безопасно код написать, чтобы предыдущие данные в файле не терялись?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сохранение трехмерной таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]