重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期
作者:webabcd
介绍
重新想象 Windows 8 Store Apps 之 其它
文件压缩和解压缩
与 Windows 商店相关的操作
app 与 web
几个 Core 的应用
页面的生命周期和程序的生命周期
示例
1、演示如何压缩和解压缩文件
Feature/Compression.xaml
<Page x:Class="XamlDemo.Feature.Compression" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.Feature" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="120 0 0 0"> <TextBlock Name="lblMsg" FontSize="14.667" /> <Button Name="btnXpress" Content="Xpress" Margin="0 10 0 0" Click="btnXpress_Click" /> <Button Name="btnXpressHuff" Content="XpressHuff" Margin="0 10 0 0" Click="btnXpressHuff_Click" /> <Button Name="btnMszip" Content="Mszip" Margin="0 10 0 0" Click="btnMszip_Click" /> <Button Name="btnLzms" Content="Lzms" Margin="0 10 0 0" Click="btnLzms_Click" /> </StackPanel> </Grid> </Page>
Feature/Compression.xaml.cs
/* * 演示如何压缩和解压缩文件 * * 注:对于非常小的数据压缩后可能比压缩前还要大,已经经过压缩算法的文件如 jpg mp3 mp4 等再压缩效果不明显也可能比之前还大 */ using System; using Windows.Storage; using Windows.Storage.Compression; using Windows.Storage.Pickers; using Windows.Storage.Streams; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using XamlDemo.Common; namespace XamlDemo.Feature { public sealed partial class Compression : Page { public Compression() { this.InitializeComponent(); } private void btnXpress_Click(object sender, RoutedEventArgs e) { // XPRESS 算法 CompressionDemo(CompressAlgorithm.Xpress); } private void btnXpressHuff_Click(object sender, RoutedEventArgs e) { // 具有霍夫曼编码的 XPRESS 算法 CompressionDemo(CompressAlgorithm.XpressHuff); } private void btnMszip_Click(object sender, RoutedEventArgs e) { // Mszip 算法 CompressionDemo(CompressAlgorithm.Mszip); } private void btnLzms_Click(object sender, RoutedEventArgs e) { // Lzms 算法 CompressionDemo(CompressAlgorithm.Lzms); } private async void CompressionDemo(CompressAlgorithm algorithm) { try { if (!Helper.EnsureUnsnapped()) return; // 选择一个准备压缩的文件 var picker = new FileOpenPicker(); picker.FileTypeFilter.Add("*"); var originalFile = await picker.PickSingleFileAsync(); if (originalFile == null) return; lblMsg.Text = "选中了文件:" + originalFile.Name; lblMsg.Text += Environment.NewLine; var compressedFilename = originalFile.Name + ".compressed"; // 注意:为了有读写 .compressed 文件的权限,需要在 Package.appxmanifest 中新增一个“文件类型关联”声明,并做相关配置 var compressedFile = await KnownFolders.DocumentsLibrary.CreateFileAsync(compressedFilename, CreationCollisionOption.GenerateUniqueName); lblMsg.Text += "创建了一个新文件,用于保存压缩后的文件:" + compressedFile.Name; lblMsg.Text += Environment.NewLine; using (var originalInput = await originalFile.OpenReadAsync()) // 打开原始文件 using (var compressedOutput = await compressedFile.OpenAsync(FileAccessMode.ReadWrite)) // 打开压缩后的数据的目标文件(目前是一个空文件) using (var compressor = new Compressor(compressedOutput.GetOutputStreamAt(0), algorithm, 0)) // 实例化 Compressor { var bytesCompressed = await RandomAccessStream.CopyAsync(originalInput, compressor); // 将原始数据写入到压缩后的数据的目标文件 lblMsg.Text += "已将原始文件的数据写入到:" + compressedFile.Name; lblMsg.Text += Environment.NewLine; var finished = await compressor.FinishAsync(); // 压缩指定文件中的数据 lblMsg.Text += "此文件中的数据已被压缩:" + compressedFile.Name; lblMsg.Text += Environment.NewLine; lblMsg.Text += "压缩前大小:" + bytesCompressed.ToString() + " - 压缩后大小:" + compressedOutput.Size.ToString(); lblMsg.Text += Environment.NewLine; } var decompressedFilename = originalFile.Name + ".decompressed"; // 注意:为了有读写 .decompressed 文件的权限,需要在 Package.appxmanifest 中新增一个“文件类型关联”声明,并做相关配置 var decompressedFile = await KnownFolders.DocumentsLibrary.CreateFileAsync(decompressedFilename, CreationCollisionOption.GenerateUniqueName); lblMsg.Text += "创建了一个新文件,用于保存解压缩后的文件:" + decompressedFile.Name; lblMsg.Text += Environment.NewLine; using (var compressedInput = await compressedFile.OpenSequentialReadAsync()) // 打开经过压缩的文件 using (var decompressedOutput = await decompressedFile.OpenAsync(FileAccessMode.ReadWrite)) // 打开解压缩后的数据的目标文件(目前是一个空文件) using (var decompressor = new Decompressor(compressedInput)) // 实例化 Compressor { var bytesDecompressed = await RandomAccessStream.CopyAsync(decompressor, decompressedOutput); // 解压缩数据,并将解压缩后的数据保存到目标文件 lblMsg.Text += "文件解压缩完成:" + decompressedFile.Name; lblMsg.Text += Environment.NewLine; lblMsg.Text += "解压缩后的大小:" + bytesDecompressed.ToString(); lblMsg.Text += Environment.NewLine; } } catch (Exception ex) { lblMsg.Text = ex.ToString(); } } } }
2、演示与 Windows 商店相关的操作
Feature/StoreDemo.xaml
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索windows
, 文件
, 数据
, text
, using
, environment
, ev xpress
, barcode xpress
, Xpress
Compressor
,以便于您获取更多的相关知识。