protected override void OnStarted() { //------------------- falta el folder // - Calcular el tick // - Calcular nombre del fichero Started = true; DateTime dateTime = DateTime.Now; int tickSeconds = (dateTime.Hour * 3600) + (dateTime.Minute * 60) + dateTime.Second; string path = "LogDay//" + _experiment.Name + "_" + (tickSeconds * 4) + ".bin"; fileStream = new FileStream(path, FileMode.CreateNew, FileAccess.ReadWrite); //--------------------------------------------- _VarsToSave = _experiment.GetVariables(_systemPriority).Where(x => x.LogValues).ToList(); _VarsValueToSave = _VarsToSave.ToDictionary(x => x.ID, x => 0D); //-------Encabezado------------------------------ MemoryStream varHeaderStream = new MemoryStream(); BinarySerializer.Serialize(_VarsToSave, varHeaderStream); writer = new BinaryWriter(fileStream); writer.Write(varHeaderStream.Length); writer.Write(varHeaderStream.ToArray()); fileStream.Flush(); //--------------------------------- _experimentSerializer = new ExperimentSerializer(_VarsToSave); //--------------Calcular Tick Timer-------------------------------- _timer = TimerCreator.MCD(_VarsToSave.Select(x => x.TicksToSample).ToList()); _timer.Tick = TimerTickHandler; _timer.Start(); }
public static List <double> Deserialize(string fileName, int id) { var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite); BinaryReader reader = new BinaryReader(fileStream); int count = (int)reader.ReadInt64(); byte[] buffer = new byte[count]; fileStream.Read(buffer, 0, count); MemoryStream varHeaderStream = new MemoryStream(buffer); varHeaderStream.Seek(0, SeekOrigin.Begin); var xxx = (List <Variable>)BinarySerializer.Deserialize(varHeaderStream); ExperimentSerializer serializer = new ExperimentSerializer(xxx); Dictionary <int, List <double> > values = new Dictionary <int, List <double> >(); foreach (var variable in xxx) { values.Add(variable.ID, new List <double>()); } MemoryStream memoryStr = new MemoryStream(); fileStream.CopyTo(memoryStr); BitStream stream = new BitStream(memoryStr); stream.Position = 0; while (stream.Position < stream.Length) { var aux = serializer.Deserialize(stream); foreach (var d in aux) { values[d.Key].Add(d.Value); } } if (values.ContainsKey(id)) { return(values[id]); } else { throw new Exception(string.Format("El id {0} not found", id)); } }