public async Task LoadCompressed() { try { var folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("xml"); var file = await folder.GetFileAsync("world.compressed"); //var stream = await file.OpenStreamForReadAsync(); var decompressedFilename = "world.decompressed"; var decompressedFile = await folder.CreateFileAsync(decompressedFilename, CreationCollisionOption.ReplaceExisting); using (var compressedInput = await file.OpenSequentialReadAsync()) using (var decompressor = new Decompressor(compressedInput)) using (var decompressedOutput = await decompressedFile.OpenAsync(FileAccessMode.ReadWrite)) { var bytesDecompressed = await RandomAccessStream.CopyAsync(decompressor, decompressedOutput); } } catch (Exception e) { throw e; } await Load(); }
public async void Open(TextBox display) { try { FileOpenPicker picker = new FileOpenPicker(); picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; picker.FileTypeFilter.Add(textExt); picker.FileTypeFilter.Add(compressedExt); StorageFile file = await picker.PickSingleFileAsync(); switch (file.FileType) { case textExt: display.Text = await FileIO.ReadTextAsync(file); break; case compressedExt: using (MemoryStream stream = new MemoryStream()) using (IInputStream input = await file.OpenSequentialReadAsync()) using (Decompressor decompressor = new Decompressor(input)) using (IRandomAccessStream output = stream.AsRandomAccessStream()) { long inputSize = input.AsStreamForRead().Length; ulong outputSize = await RandomAccessStream.CopyAsync(decompressor, output); output.Seek(0); display.Text = await new StreamReader(output.AsStream()).ReadToEndAsync(); Show(string.Format("Decompressed {0} bytes to {1} bytes", inputSize, outputSize), "Compression App"); } break; default: break; } } catch { } }
private async void CompressFile(CompressAlgorithm? Algorithm, StorageFile originalFile) { Progress.Text = ""; try { Progress.Text += String.Format("\"{0}\" has been picked\n", originalFile.Name); var compressedFilename = originalFile.Name + ".compressed"; var compressedFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(compressedFilename, CreationCollisionOption.GenerateUniqueName); Progress.Text += String.Format("\"{0}\" has been created to store compressed data\n", compressedFile.Path); // ** DO COMPRESSION ** // Following code actually performs compression from original file to the newly created // compressed file. In order to do so it: // 1. Opens input for the original file. // 2. Opens output stream on the file to be compressed and wraps it into Compressor object. // 3. Copies original stream into Compressor wrapper. // 4. Finalizes compressor - it puts termination mark into stream and flushes all intermediate // buffers. using (var originalInput = await originalFile.OpenReadAsync()) using (var compressedOutput = await compressedFile.OpenAsync(FileAccessMode.ReadWrite)) using (var compressor = !Algorithm.HasValue ? new Compressor(compressedOutput.GetOutputStreamAt(0)) : new Compressor(compressedOutput.GetOutputStreamAt(0), Algorithm.Value, 0)) { Progress.Text += "All streams wired for compression\n"; var bytesCompressed = await RandomAccessStream.CopyAsync(originalInput, compressor); var finished = await compressor.FinishAsync(); Progress.Text += String.Format("Compressed {0} bytes into {1}\n", bytesCompressed, compressedOutput.Size); } var decompressedFilename = originalFile.Name + ".decompressed"; var decompressedFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(decompressedFilename, CreationCollisionOption.GenerateUniqueName); Progress.Text += String.Format("\"{0}\" has been created to store decompressed data\n", decompressedFile.Path); // ** DO DECOMPRESSION ** // Following code performs decompression from the just compressed file to the // decompressed file. In order to do so it: // 1. Opens input stream on compressed file and wraps it into Decompressor object. // 2. Opens output stream from the file that will store decompressed data. // 3. Copies data from Decompressor stream into decompressed file stream. using (var compressedInput = await compressedFile.OpenSequentialReadAsync()) using (var decompressor = new Decompressor(compressedInput)) using (var decompressedOutput = await decompressedFile.OpenAsync(FileAccessMode.ReadWrite)) { Progress.Text += "All streams wired for decompression\n"; var bytesDecompressed = await RandomAccessStream.CopyAsync(decompressor, decompressedOutput); Progress.Text += String.Format("Decompressed {0} bytes of data\n", bytesDecompressed); } rootPage.NotifyUser("All done", NotifyType.StatusMessage); } catch (Exception ex) { rootPage.NotifyUser(ex.Message, NotifyType.ErrorMessage); } }