コード例 #1
0
ファイル: SaveSystem.cs プロジェクト: SanteriSuomi/Misc-Unity
        /// <summary>
        /// Save all objects that are registered.
        /// </summary>
        /// <param name="saveName">Name of the save file.</param>
        /// <param name="fileType">Type of the save.</param>
        /// <param name="compressionLevel">Compression applied after saving.</param>
        public static void SaveAll(string saveName, FileType fileType, CompressionLevel compressionLevel)
        {
            IsSaving = true;

            try
            {
                SaveData[] allSaves = new SaveData[saveablesList.Count];
                for (int i = 0; i < saveablesList.Count; i++)
                {
                    if (i <= allSaves.GetUpperBound(0))
                    {
                        allSaves[i] = saveablesList[i].GetSave();
                    }
                    else
                    {
                        Debug.LogWarning("There is more objects marked as saveables than there are objects saved on the disk.");
                        break;
                    }
                }

                Save(fileType, saveName, new AllSaveData <SaveData> {
                    saves = allSaves
                });
                if (compressionLevel != CompressionLevel.NoCompression)
                {
                    Compress(compressionLevel);
                }
            }
            catch (Exception e)
            {
                Debug.LogWarning(e);
            }

            IsSaving = false;
        }
コード例 #2
0
        public static byte[] Compress(byte[] data, bool useGZipCompression = true)

        {
            System.IO.Compression.CompressionLevel compressionLevel = System.IO.Compression.CompressionLevel.Fastest;

            using (MemoryStream memoryStream = new MemoryStream())

            {
                if (useGZipCompression)

                {
                    using (System.IO.Compression.GZipStream gZipStream = new System.IO.Compression.GZipStream(memoryStream,

                                                                                                              compressionLevel, true))

                    {
                        gZipStream.Write(data, 0, data.Length);
                    }
                }

                else

                {
                    using (System.IO.Compression.GZipStream gZipStream = new System.IO.Compression.GZipStream(memoryStream,

                                                                                                              compressionLevel, true))

                    {
                        gZipStream.Write(data, 0, data.Length);
                    }
                }

                return(memoryStream.ToArray());
            }
        }
コード例 #3
0
    //https://stackoverflow.com/questions/39191950/how-to-compress-a-byte-array-without-stream-or-system-io

    public static byte[] GetCompressed(this byte[] data, CompressionLevel _compressionLevel = CompressionLevel.Fastest)
    {
        MemoryStream output = new MemoryStream();

        using (DeflateStream dstream = new DeflateStream(output, _compressionLevel))
        {
            dstream.Write(data, 0, data.Length);
        }
        return(output.ToArray());
    }
コード例 #4
0
        private static void AddEntry(ZipArchive archive, string fileNameOnDisk, string entryFileName,
                                     CompressionLevel compressionLevel = CompressionLevel.Fastest)
        {
            // @DIRSEP: Converting to '/' because it will be a zip archive name and '/' is to spec
            var entry = archive.CreateEntry(entryFileName.ToForwardSlashes(), compressionLevel);

            entry.LastWriteTime = new FileInfo(fileNameOnDisk).LastWriteTime;
            using var fs        = new FileStream(fileNameOnDisk, FileMode.Open, FileAccess.Read);
            using var eo        = entry.Open();
            fs.CopyTo(eo);
        }
コード例 #5
0
 public static byte[] Compress(byte[] data, System.IO.Compression.CompressionLevel compressionLevel = System.IO.Compression.CompressionLevel.Optimal)
 {
     try {
         UnityEngine.Profiling.Profiler.BeginSample("Compress");
         MemoryStream output = new MemoryStream();
         using (DeflateStream dstream = new DeflateStream(output, compressionLevel)) {
             dstream.Write(data, 0, data.Length);
         }
         return(output.ToArray());
     }
     finally {
         UnityEngine.Profiling.Profiler.EndSample();
     }
 }
コード例 #6
0
ファイル: SaveSystem.cs プロジェクト: SanteriSuomi/Misc-Unity
        /// <summary>
        /// Compress the save folder in to a .zip file.
        /// </summary>
        private static void Compress(CompressionLevel compressionLevel)
        {
            if (Directory.Exists(GetSaveDirectoryPath()))
            {
                if (File.Exists(GetZipFilePath()))
                {
                    File.Delete(GetZipFilePath());
                }

                ZipFile.CreateFromDirectory(GetSaveDirectoryPath(), GetZipFilePath(), compressionLevel, false);
                ClearSaves(); // Remove remaining files because they are now saves in the .zip file.
                return;
            }

            LogWarning(GetSaveDirectoryPath());
        }
コード例 #7
0
        public static CompressionLevel ToCompressionLevel(this SystemCompressionLevel thisValue)
        {
            switch (thisValue)
            {
            case SystemCompressionLevel.NoCompression:
                return(CompressionLevel.None);

            case SystemCompressionLevel.Fastest:
                return(CompressionLevel.Fast);

            case SystemCompressionLevel.Optimal:
                return(CompressionLevel.Ultra);

            default:
                throw new ArgumentOutOfRangeException(nameof(thisValue), thisValue, null);
            }
        }
コード例 #8
0
        private void ExportCTP_Click(object sender, EventArgs e)
        {
            SaveFileDialog saver = new SaveFileDialog();

            saver.Filter = "Customization Tool Project (*.ctp) | *.ctp";
            DialogResult res = saver.ShowDialog();

            if (res == DialogResult.OK)
            {
                UnpackingLoader.Visible = true;
                ExportCTP.Enabled       = false;
                StatusLabel.Text        = "Exporting Customization Tool Project..";

                System.IO.Compression.CompressionLevel ctpCompression = System.IO.Compression.CompressionLevel.Optimal;
                if (CTPCompression.Value == 1)
                {
                    ctpCompression = System.IO.Compression.CompressionLevel.NoCompression;
                }
                if (CTPCompression.Value == 2)
                {
                    ctpCompression = System.IO.Compression.CompressionLevel.Fastest;
                }
                if (CTPCompression.Value == 3)
                {
                    ctpCompression = System.IO.Compression.CompressionLevel.Optimal;
                }

                Thread ExportThread = new Thread(delegate()
                {
                    ZipFile.CreateFromDirectory(AppDomain.CurrentDomain.BaseDirectory + "\\tmp", saver.FileName, ctpCompression, false);
                });
                ExportThread.Start();
                while (ExportThread.IsAlive)
                {
                    Application.DoEvents();
                }

                MessageBox.Show("Exporting completed", "Complete");
                StatusLabel.Text        = "Done.";
                ExportCTP.Enabled       = true;
                UnpackingLoader.Visible = false;
            }
        }
コード例 #9
0
ファイル: AkyuiCompressor.cs プロジェクト: potkpot/AkyuiUnity
        public static byte[] Compress(IAkyuiLoader loader)
        {
            const CompressionLevel compressionLevel = CompressionLevel.Fastest;

            using (var memoryStream = new MemoryStream())
            {
                using (var zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create))
                {
                    {
                        var newEntry = zipArchive.CreateEntry(Path.Combine(loader.LayoutInfo.Name, "layout.json"), compressionLevel);
                        using (var stream = new BinaryWriter(newEntry.Open()))
                        {
                            var text      = JsonSerializer.ToJsonString(ToSerializable(loader.LayoutInfo));
                            var textBytes = System.Text.Encoding.UTF8.GetBytes(text);
                            stream.Write(textBytes, 0, textBytes.Length);
                        }
                    }

                    {
                        var newEntry = zipArchive.CreateEntry(Path.Combine(loader.LayoutInfo.Name, "assets.json"), compressionLevel);
                        using (var stream = new BinaryWriter(newEntry.Open()))
                        {
                            var text      = JsonSerializer.ToJsonString(ToSerializable(loader.AssetsInfo));
                            var textBytes = System.Text.Encoding.UTF8.GetBytes(text);
                            stream.Write(textBytes, 0, textBytes.Length);
                        }
                    }

                    foreach (var asset in loader.AssetsInfo.Assets)
                    {
                        var newEntry = zipArchive.CreateEntry(Path.Combine(loader.LayoutInfo.Name, "assets", asset.FileName), compressionLevel);
                        using (var stream = new BinaryWriter(newEntry.Open()))
                        {
                            var bytes = loader.LoadAsset(asset.FileName);
                            stream.Write(bytes, 0, bytes.Length);
                        }
                    }
                }

                return(memoryStream.ToArray());
            }
        }
コード例 #10
0
 private void initStream()
 {
     if (deflateStream != null)
     {
         return;
     }
     // I must create the DeflateStream only if necessary, because of its bug with empty input (sigh)
     // I must create with leaveopen=true always and do the closing myself, because MS moronic implementation of DeflateStream: I cant force a flush of the underlying stream witouth closing (sigh bis)
     System.IO.Compression.CompressionLevel clevel = CompressionLevel.Optimal;
     // thaks for the granularity, MS!
     if (compressLevel >= 1 && compressLevel <= 5)
     {
         clevel = CompressionLevel.Fastest;
     }
     else if (compressLevel == 0)
     {
         clevel = CompressionLevel.NoCompression;
     }
     deflateStream = new DeflateStream(rawStream, clevel, true);
 }
コード例 #11
0
ファイル: ZipArchiver.cs プロジェクト: jcaillon/DotUtilities
        /// <inheritdoc cref="IZipArchiver.SetCompressionLevel"/>
        public void SetCompressionLevel(ArchiveCompressionLevel archiveCompressionLevel)
        {
            switch (archiveCompressionLevel)
            {
            case ArchiveCompressionLevel.None:
                _compressionLevel = CompressionLevel.NoCompression;
                break;

            case ArchiveCompressionLevel.Fastest:
                _compressionLevel = CompressionLevel.Fastest;
                break;

            case ArchiveCompressionLevel.Optimal:
                _compressionLevel = CompressionLevel.Optimal;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(archiveCompressionLevel), archiveCompressionLevel, null);
            }
        }
コード例 #12
0
        public static byte[] Compress(byte[] data, CompressAlgorithm method = CompressAlgorithm.Deflate, CompressionLevel level = CompressionLevel.Optimal)
        {
            MemoryStream output = new MemoryStream();

            switch (method)
            {
            case CompressAlgorithm.Deflate:
            {
                using (DeflateStream dstream = new DeflateStream(output, level))
                {
                    dstream.Write(data, 0, data.Length);
                }
            }
            break;

            case CompressAlgorithm.Zstd:
            {
                var opt = new CompressionOptions(CompressionOptions.DefaultCompressionLevel);
                using (var compressor = new Compressor(opt))
                {
                    return(compressor.Wrap(data));
                }
            }
            }
            return(output.ToArray());
        }
コード例 #13
0
 public System.IO.Compression.ZipArchiveEntry CreateEntry(string entryName, System.IO.Compression.CompressionLevel compressionLevel)
 {
     throw null;
 }
コード例 #14
0
 public GZipCompression(CompressionOptions options)
     : base(options)
 {
     _compressionLevel = MapCompressionLevel(options.CompressionLevel);
 }