Сериализация структуры и пошаговое считывания данных из файла - C#
Формулировка задачи:
Привет всем!!!
Проблема следующая: есть класс метод которого генерирует большое количество данных с последующей записью в структуру. Она после каждого шага цикла должна записываться в файл "*.xml" (тот самый што предыдущая).
Также нужно организовать пошаговое считывания этих данных из файла.
Пробовал что-то писать:
Структура:
Часть метода записи с циклом:
Что получается (файл не полностью и даже не полностью сериализация структуры):
Метод десериализации(Не может десериализувать структуру):
Как мне организовать сериализацию структуры с пошаговою записью ее в файл.
Заранее благодарю !!!
public struct B { public Vector3 B_vect; public double B_abs; public Vector3 XYZ; }
for (int x = (int)UP_Limit[0] + 1; x <= (int)HIGH_Limit[0]; x++) { for (int y = (int)UP_Limit[1] + 1; y <= (int)HIGH_Limit[1]; y++) { for (int z = (int)UP_Limit[2] + 1; z <= (int)HIGH_Limit[2]; z++) { B Bl = new B(); Bl.XYZ = new Vector3(x, y, x); Bl.B_vect = new Vector3(One_Point(Bl.XYZ)); Bl.B_abs = lenght(Bl.B_vect); formatter.Serialize(stream, Bl); context.Send(OnProgressReport_X, 1 + 100 * (z - 1) / c); } } }
<?xml version="1.0" encoding="utf-8"?> <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <B_vect> <X>-195.261932</X> <Y>-76.62393</Y> <Z>271.885864</Z> </B_vect> <B_abs>343.39535866804488</B_abs> <XYZ> <X>1</X> <Y>1</Y> <Z>1</Z> </XYZ> </B><?xml version="1.0" encoding="utf-8"?> <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <B_vect> <X>-195.261932</X> <Y>-76.62393</Y> <Z>271.885864</Z> </B_vect> <B_abs>343.39535866804488</B_abs> <XYZ> <X>1</X> <Y>1</Y> <Z>1</Z> </XYZ> </B><?xml version="1.0" encoding="utf-8"?> <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <B_vect> <X>-195.261932</X> <Y>-76.62393</Y> <Z>271.885864</Z> </B_vect> <B_abs>343.39535866804488</B_abs> <XYZ> <X>1</X> <Y>1</Y> <Z>1</Z> </XYZ> </B><?xml version="1.0" encoding="utf-8"?> <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <B_vect> <X>-195.261932</X> <Y>-76.62393</Y> <Z>271.885864</Z> </B_vect> <B_abs>343.39535866804488</B_abs> <XYZ> <X>1</X> <Y>1</Y> <Z>1</Z> </XYZ> </B><?xml version="1.0" encoding="utf-8"?> <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <B_vect> <X>-195.261932</X> <Y>-76.62393</Y> <Z>271.885864</Z> </B_vect> <B_abs>343.39535866804488</B_abs> <XYZ> <X>1</X> <Y>1</Y> <Z>1</Z> </XYZ>
B Bl; using (FileStream fs = new FileStream(file+".xml", FileMode.OpenOrCreate)) { Bl = (B)formatter.Deserialize(fs); } return Bl;
Решение задачи: «Сериализация структуры и пошаговое считывания данных из файла»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml.Linq; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { List<STR> strs = new List<STR>(); Random r = new Random(); for (int i = 0; i < 10; i++) { strs.Add(new STR { X = (100 * r.NextDouble()), Y = (200 * r.NextDouble()) }); } using (Stream fs = new FileStream(@"C:\123.xml", FileMode.Append, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs)) { foreach (var s in strs) { sw.Write(string.Format("{0}\n",s.ToString())); } } } Console.ReadLine(); } } struct STR { public double X; public double Y; public override string ToString() { XDocument doc=new XDocument(new XElement("STR", new XElement("X", X), new XElement("Y", Y))); return doc.ToString(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д