Сериализация структуры и пошаговое считывания данных из файла - 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();
}
}
}