Exemplo n.º 1
0
        public void AssertCompressAndUnCompressFileStream(string saveFileName,
                                                          Dictionary <string, FileStream> fileStreams,
                                                          byte compressLevelFlag)
        {
            var compressStream = new FileStream(saveFileName + ".multifile.huf", FileMode.Create);

            compressStream.Seek(0, SeekOrigin.Begin);
            var cw = new CompressStreamWriter(compressStream);

            cw.Write(fileStreams, compressLevelFlag, (int)EncryptType.None);
            compressStream.Seek(0, SeekOrigin.Begin);
            // 解压缩
            using (var cr = new CompressStreamReader(compressStream))
            {
                cr.Read(null, s => File.Create("recover." + s));
            }

            foreach (var s in fileStreams.Keys)
            {
                using (var fs = File.OpenRead("recover." + s))
                {
                    using (var br = new BinaryReader(fs))
                    {
                        fileStreams[s].Seek(0, SeekOrigin.Begin);
                        using (var br2 = new BinaryReader(fileStreams[s]))
                        {
                            // TODO 长度有可能会溢出,不过这是测试,一般不用管
                            Assert.AreEqual(BitConverter.ToString(br2.ReadBytes((int)br2.BaseStream.Length)),
                                            BitConverter.ToString(br.ReadBytes((int)br.BaseStream.Length)));
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void Compress_Button_Click(object sender, RoutedEventArgs e)
        {
            var encoding = new UTF8Encoding();

            try
            {
                using (var unCompressStream = new MemoryStream(encoding.GetBytes(TextboxUncompressed.Text)))
                {
                    using (var ms = new MemoryStream())
                    {
                        using (var cw = new CompressStreamWriter(ms, encoding, true))
                        {
                            cw.Write(unCompressStream, CompressLevel.Slow);
                        }

                        ms.Seek(0, SeekOrigin.Begin);
                        TextboxCompressed.Text = Convert.ToBase64String(ms.GetBuffer());
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "哎呀,发生了一个错误~", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Exemplo n.º 3
0
        private void Compress_Files_Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // 选择要压缩的文件
                var fileOpenDialog = new OpenFileDialog
                {
                    Multiselect     = true,
                    Title           = "选择你要压缩的文件(可以多选)",
                    CheckFileExists = true
                };
                fileOpenDialog.FileOk += (o2, e2) =>
                {
                    var fileStreamWithName = new Dictionary <string, FileStream>();
                    var filePaths          = fileOpenDialog.FileNames;
                    foreach (var filePath in filePaths)
                    {
                        var fileName   = Path.GetFileName(filePath);
                        var fileStream = File.OpenRead(filePath);
                        fileStreamWithName[fileName] = fileStream;
                    }

                    var fileSaveDialog = new SaveFileDialog
                    {
                        Title           = "保存你的压缩文件到指定的目录",
                        AddExtension    = true,
                        DefaultExt      = "huf",
                        Filter          = "HUF压缩文件|*.huf",
                        CreatePrompt    = true,
                        CheckPathExists = true
                    };

                    fileSaveDialog.FileOk += (o3, e3) =>
                    {
                        using (var outputCompressStream = fileSaveDialog.OpenFile())
                        {
                            using (var cw = new CompressStreamWriter(outputCompressStream))
                            {
                                cw.Write(fileStreamWithName, CompressLevel.Slow);
                            }
                        }

                        MessageBox.Show("压缩成功!", "信息", MessageBoxButton.OK, MessageBoxImage.Information);
                    };
                    fileSaveDialog.ShowDialog();
                };
                MessageBox.Show("压缩过大的文件可能会导致程序暂时失去响应,建议使用总量不大于 50 kb 的文件进行压缩测试", "警告", MessageBoxButton.OK, MessageBoxImage.Warning);
                fileOpenDialog.ShowDialog();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message, "哎呀,发生了一个错误~", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Exemplo n.º 4
0
        public void AssertCompressAndUnCompressBytes(string saveFileName, byte[] sourceData, byte compressLevelFlag)
        {
            var output         = new MemoryStream();
            var input          = new MemoryStream(sourceData);
            var compressStream = new FileStream(saveFileName + ".test.huf", FileMode.Create);

            compressStream.Seek(0, SeekOrigin.Begin);
            var cw = new CompressStreamWriter(compressStream);

            cw.Write(input, compressLevelFlag, (int)EncryptType.None);
            compressStream.Seek(0, SeekOrigin.Begin);
            var cr = new CompressStreamReader(compressStream);

            cr.Read(() => output);
            output.Seek(0, SeekOrigin.Begin);
            var br = new BinaryReader(output);

            Assert.AreEqual(BitConverter.ToString(sourceData), BitConverter.ToString(br.ReadBytes(sourceData.Length)));
        }