//壓縮與解壓縮
DoCompressDecompress(null);
DoCompressDecompress(CompressAlgorithm.Xpress);
DoCompressDecompress(CompressAlgorithm.XpressHuff);
DoCompressDecompress(CompressAlgorithm.Mszip);
DoCompressDecompress(CompressAlgorithm.Lzms);
private async voidDoCompressDecompress(CompressAlgorithm? Algorithm)
{
try
{
var picker = newFileOpenPicker();
picker.FileTypeFilter.Add("*");
var originalFile = awaitpicker.PickSingleFileAsync();
if (originalFile ==null)
return;
var compressedFilename =originalFile.Name + ".compressed";
var compressedFile = awaitKnownFolders.DocumentsLibrary.CreateFileAsync(compressedFilename,CreationCollisionOption.GenerateUniqueName);
// ** 壓縮 **
// 1. Opens input for theoriginal file.
// 2. Opens output stream onthe file to be compressed and wraps it into Compressorobject.
// 3. Copies original streaminto Compressor wrapper.
// 4. Finalizes compressor -it puts termination mark into stream and flushes all intermediatebuffers.
using (var originalInput =await originalFile.OpenReadAsync())
using (var compressedOutput =await compressedFile.OpenAsync(FileAccessMode.ReadWrite))
using (var compressor =Algorithm.HasValue ? newCompressor(compressedOutput.GetOutputStreamAt(0), Algorithm.Value,0) : new Compressor(compressedOutput.GetOutputStreamAt(0)))
{
var bytesCompressed = awaitRandomAccessStream.CopyAsync(originalInput, compressor);
bool finished = awaitcompressor.FinishAsync();
Debug.WriteLine("Compressed {0} bytes into{1}\n", bytesCompressed, compressedOutput.Size);
}
var decompressedFilename =originalFile.Name + ".decompressed";
var decompressedFile = awaitKnownFolders.DocumentsLibrary.CreateFileAsync(decompressedFilename,CreationCollisionOption.GenerateUniqueName);
// ** 解壓縮 **
// 1. Opens input stream oncompressed file and wraps it into Decompressor object.
// 2. Opens output streamfrom the file that will store decompressed data.
// 3. Copies data fromDecompressor stream into decompressed file stream.
using (var compressedInput =await compressedFile.OpenSequentialReadAsync())
using (var decompressor = newDecompressor(compressedInput))
using (var decompressedOutput= await decompressedFile.OpenAsync(FileAccessMode.ReadWrite))
{
var bytesDecompressed = awaitRandomAccessStream.CopyAsync(decompressor,decompressedOutput);
Debug.WriteLine("Decompressed {0} bytes ofdata\n", bytesDecompressed);
}
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message);
}
}