Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        /// <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);
            }
        }