/// <summary> /// Saves a set of years sensor data to disk /// </summary> /// <param name="years">The years to save</param> public void SaveSensorData(int[] years) { using (var zip = ZipFile.Read(SaveLocation)) { zip.CompressionLevel = CompressionLevel.None; foreach (var year in years) { foreach (var sensor in Sensors) { ; var dataBlockStream = new MemoryStream(); var x = new YearlyDataBlock(sensor.CurrentState.GetCompressedValues(StartYear.AddYears(year), StartYear.AddYears(year + 1)), sensor.RawData.GetCompressedValues(StartYear.AddYears(year), StartYear.AddYears(year + 1))); Serializer.Serialize(dataBlockStream, x); dataBlockStream.Position = 0; if (zip.EntryFileNames.Contains(sensor.Hash + "/" + StartYear.AddYears(year).ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern))) { zip.RemoveEntry(sensor.Hash + "\\" + StartYear.AddYears(year).ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern)); } zip.AddEntry(sensor.Hash + "\\" + StartYear.AddYears(year).ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern), dataBlockStream); } } zip.Save(SaveLocation); } }
/// <summary> /// Saves the dataset to disk /// </summary> /// <param name="saveLocation">Location to save file to</param> /// <param name="exportData">Whether or not to export the data</param> /// <param name="deleteFile">Whether or not to first delete the file</param> public void SaveToFile(string saveLocation, bool exportData, bool deleteFile) { if (deleteFile && File.Exists(saveLocation)) File.Delete(saveLocation); if (!Directory.Exists(Common.DatasetSaveLocation)) Directory.CreateDirectory(Common.DatasetSaveLocation); if (File.Exists(saveLocation)) File.Copy(saveLocation, saveLocation + ".backup", true); if (exportData) { var exportFolder = Common.DatasetExportRootFolder(this); var exportedFiles = Directory.GetFiles(exportFolder, "*.*", SearchOption.AllDirectories).OrderBy(x => x).ToArray(); if(exportedFiles.Length >= 5) { for (var i = 0; i < exportedFiles.Length - 2; i++) { File.Delete(exportedFiles[i]); string s = Path.GetDirectoryName(exportedFiles[i]); Directory.Delete(Path.GetDirectoryName(exportedFiles[i])); } } DatasetExporter.Export(this, Common.DatasetExportLocation(this), ExportFormat.CSV, true); } /* .NET BinaryFormatter using (var stream = new FileStream(SaveLocation, FileMode.Create)) new BinaryFormatter().Serialize(stream, this); * Protobuf using (var file = File.Create(SaveLocation)) Serializer.Serialize(file, this); */ using (var zip = File.Exists(saveLocation) ? ZipFile.Read(saveLocation) : new ZipFile()) { zip.CompressionLevel = CompressionLevel.None; zip.Comment = string.Format("B3 ZIP FORMAT v1.1"); var datasetStream = new MemoryStream(); Serializer.Serialize(datasetStream, this); datasetStream.Position = 0; if (zip.EntryFileNames.Contains("dataset")) zip.RemoveEntry("dataset"); zip.AddEntry("dataset", datasetStream); var siteStream = new MemoryStream(); Serializer.Serialize(siteStream, Site); siteStream.Position = 0; if (zip.EntryFileNames.Contains("site")) zip.RemoveEntry("site"); zip.AddEntry("site", siteStream); if (Site.Images != null) { var siteImagesStream = new MemoryStream(); new BinaryFormatter().Serialize(siteImagesStream, Site.Images); siteImagesStream.Position = 0; if (zip.EntryFileNames.Contains("siteimages")) zip.RemoveEntry("siteimages"); zip.AddEntry("siteimages", siteImagesStream); } foreach (var sensor in Sensors) { var sensorMetaData = new MemoryStream(); Serializer.Serialize(sensorMetaData, sensor); sensorMetaData.Position = 0; if (!zip.EntryFileNames.Contains(sensor.Hash + "/")) zip.AddDirectoryByName(sensor.Hash); if (zip.EntryFileNames.Contains(sensor.Hash + "/metadata")) zip.RemoveEntry(sensor.Hash + "\\metadata"); zip.AddEntry(sensor.Hash + "\\metadata", sensorMetaData); for (var i = StartYear.AddYears(LowestYearLoaded); i < StartYear.AddYears(HighestYearLoaded + 1); i = i.AddYears(1)) { var dataBlockStream = new MemoryStream(); var x = new YearlyDataBlock(sensor.CurrentState.GetCompressedValues(i, i.AddYears(1)), sensor.RawData.GetCompressedValues(i, i.AddYears(1))); Serializer.Serialize(dataBlockStream, x); dataBlockStream.Position = 0; if (zip.EntryFileNames.Contains(sensor.Hash + "/" + i.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern))) zip.RemoveEntry(sensor.Hash + "\\" + i.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern)); zip.AddEntry(sensor.Hash + "\\" + i.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern), dataBlockStream); } } zip.Save(saveLocation); } }
/// <summary> /// Saves a set of years sensor data to disk /// </summary> /// <param name="years">The years to save</param> public void SaveSensorData(int[] years) { using (var zip = ZipFile.Read(SaveLocation)) { zip.CompressionLevel = CompressionLevel.None; foreach (var year in years) { foreach (var sensor in Sensors) { ; var dataBlockStream = new MemoryStream(); var x = new YearlyDataBlock(sensor.CurrentState.GetCompressedValues(StartYear.AddYears(year), StartYear.AddYears(year + 1)), sensor.RawData.GetCompressedValues(StartYear.AddYears(year), StartYear.AddYears(year + 1))); Serializer.Serialize(dataBlockStream, x); dataBlockStream.Position = 0; if (zip.EntryFileNames.Contains(sensor.Hash + "/" + StartYear.AddYears(year).ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern))) zip.RemoveEntry(sensor.Hash + "\\" + StartYear.AddYears(year).ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern)); zip.AddEntry(sensor.Hash + "\\" + StartYear.AddYears(year).ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern), dataBlockStream); } } zip.Save(SaveLocation); } }
/// <summary> /// Saves the dataset to disk /// </summary> /// <param name="saveLocation">Location to save file to</param> /// <param name="exportData">Whether or not to export the data</param> /// <param name="deleteFile">Whether or not to first delete the file</param> public void SaveToFile(string saveLocation, bool exportData, bool deleteFile) { if (deleteFile && File.Exists(saveLocation)) { File.Delete(saveLocation); } if (!Directory.Exists(Common.DatasetSaveLocation)) { Directory.CreateDirectory(Common.DatasetSaveLocation); } if (File.Exists(saveLocation)) { File.Copy(saveLocation, saveLocation + ".backup", true); } if (exportData) { var exportFolder = Common.DatasetExportRootFolder(this); var exportedFiles = Directory.GetFiles(exportFolder, "*.*", SearchOption.AllDirectories).OrderBy(x => x).ToArray(); if (exportedFiles.Length >= 5) { for (var i = 0; i < exportedFiles.Length - 4; i++) { File.Delete(exportedFiles[i]); } } DatasetExporter.Export(this, Common.DatasetExportLocation(this), ExportFormat.CSV, true); } /* .NET BinaryFormatter * using (var stream = new FileStream(SaveLocation, FileMode.Create)) * new BinaryFormatter().Serialize(stream, this); * * Protobuf * using (var file = File.Create(SaveLocation)) * Serializer.Serialize(file, this); */ using (var zip = File.Exists(saveLocation) ? ZipFile.Read(saveLocation) : new ZipFile()) { zip.CompressionLevel = CompressionLevel.None; zip.Comment = string.Format("B3 ZIP FORMAT v1.1"); var datasetStream = new MemoryStream(); Serializer.Serialize(datasetStream, this); datasetStream.Position = 0; if (zip.EntryFileNames.Contains("dataset")) { zip.RemoveEntry("dataset"); } zip.AddEntry("dataset", datasetStream); var siteStream = new MemoryStream(); Serializer.Serialize(siteStream, Site); siteStream.Position = 0; if (zip.EntryFileNames.Contains("site")) { zip.RemoveEntry("site"); } zip.AddEntry("site", siteStream); if (Site.Images != null) { var siteImagesStream = new MemoryStream(); new BinaryFormatter().Serialize(siteImagesStream, Site.Images); siteImagesStream.Position = 0; if (zip.EntryFileNames.Contains("siteimages")) { zip.RemoveEntry("siteimages"); } zip.AddEntry("siteimages", siteImagesStream); } foreach (var sensor in Sensors) { var sensorMetaData = new MemoryStream(); Serializer.Serialize(sensorMetaData, sensor); sensorMetaData.Position = 0; if (!zip.EntryFileNames.Contains(sensor.Hash + "/")) { zip.AddDirectoryByName(sensor.Hash); } if (zip.EntryFileNames.Contains(sensor.Hash + "/metadata")) { zip.RemoveEntry(sensor.Hash + "\\metadata"); } zip.AddEntry(sensor.Hash + "\\metadata", sensorMetaData); for (var i = StartYear.AddYears(LowestYearLoaded); i < StartYear.AddYears(HighestYearLoaded + 1); i = i.AddYears(1)) { var dataBlockStream = new MemoryStream(); var x = new YearlyDataBlock(sensor.CurrentState.GetCompressedValues(i, i.AddYears(1)), sensor.RawData.GetCompressedValues(i, i.AddYears(1))); Serializer.Serialize(dataBlockStream, x); dataBlockStream.Position = 0; if (zip.EntryFileNames.Contains(sensor.Hash + "/" + i.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern))) { zip.RemoveEntry(sensor.Hash + "\\" + i.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern)); } zip.AddEntry(sensor.Hash + "\\" + i.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern), dataBlockStream); } } zip.Save(saveLocation); } }