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))); } } } } }
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); } }
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); } }
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))); }