Windows 8 Store Apps学习70) 其它: 文件压缩和解压缩

重新想象 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
,以便于您获取更多的相关知识。

时间: 2024-11-08 22:31:47

Windows 8 Store Apps学习70) 其它: 文件压缩和解压缩的相关文章

重新想象 Windows 8 Store Apps (25) - 选取器: 文件选取窗口, 文件夹选取窗口, 文件保存窗口

原文:重新想象 Windows 8 Store Apps (25) - 选取器: 文件选取窗口, 文件夹选取窗口, 文件保存窗口 [源码下载] 重新想象 Windows 8 Store Apps (25) - 选取器: 文件选取窗口, 文件夹选取窗口, 文件保存窗口 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 选取器 FileOpenPicker - 选择一个文件或多个文件 FolderPicker - 选择一个文件夹 FileSavePicker - 保存

重新想象 Windows 8 Store Apps (22) - 文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件

原文:重新想象 Windows 8 Store Apps (22) - 文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件 [源码下载] 重新想象 Windows 8 Store Apps (22) - 文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 文件系统 File Access - 访问文件夹和文件,以及获取文件的各种属性 Folder Access - 遍历文件夹时的一些特殊操作 Thu

Windows 8 Store Apps学习(26) 选取器: 自定义文件选取窗口和保存窗口

选取器: 自定义文件选取窗口, 自定义文件保存窗口 介绍 重新想象 Windows 8 Store Apps 之 选取器 FileOpenPickerUI - 自定义文件打开选取器 FileSavePickerUI - 自定义文件保存选取器 示例 1. 开发一个自定义文件选取窗口.注:如果需要 激活自定义的文件选取窗口,请在弹出的选取器窗口的左上角选择对应 Provider Picker/MyOpenPicker.xaml <Page x:Class="XamlDemo.Picker.My

Windows 8 Store Apps学习(25) 选取器: 文件选取窗口等

选取器: 文件选取窗口, 文件夹选取窗口, 文件保存窗口 介绍 重新想象 Windows 8 Store Apps 之 选取器 FileOpenPicker - 选择一个文件或多个文件 FolderPicker - 选择一个文件夹 FileSavePicker - 保存文件到指定路径 示例 1.演示如何通过 FileOpenPicker 选择一个文件或多 个文件 Picker/FileOpenPickerDemo.xaml <Page x:Class="XamlDemo.Picker.Fi

Windows 8 Store Apps学习(24) Application Data和Package中的文件操作

文件系统: Application Data 中的文件操作, Package 中的文件操作 介绍 重新想象 Windows 8 Store Apps 之 文件系统 Application Data(应用程序数据存储) 中的文件操作 Application Data(应用程序数据存储) 中的"设置"操作 通过 uri 引用 Application Data(应用程序数据存储) 中的媒体(图片.视频或音频) 访问 Package 中的文件 访问可移动存储 示例 1.演示如何在 Applic

Windows 8 Store Apps学习(22) 文件系统: 访问文件夹和文件,搜索本地文件

文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件 介绍 重新想象 Windows 8 Store Apps 之 文件系统 File Access - 访问文件夹和文件,以及获取文件的各种属性 Folder Access - 遍历文件夹时的一些特殊操作 Thumbnail Access - 获取文件的缩略图 AQS - 通过 AQS(Advanced Query Syntax)搜索本地文件 示例 1.演示如何访问文件夹和文件,以及如何获取文件的各种属性 FileSystem/FileAc

Windows 8 Store Apps学习(39) 契约: Share Contract

介绍 重新想象 Windows 8 Store Apps 之 契约 Share Contract - 右侧边栏称之为 Charm,其 中的"共享"称之为 Share Contract 示例 1.演示如何开发共享源 Contracts/ShareContract/ShareSource.xaml <Page x:Class="XamlDemo.Contracts.ShareContract.ShareSource" xmlns="http://sche

Windows 8 Store Apps学习(67) 后台任务: 推送通知

介绍 重新想象 Windows 8 Store Apps 之 后台任务 推送通知 示例 1.客户端 BackgroundTask/PushNotification.xaml <Page x:Class="XamlDemo.BackgroundTask.PushNotification" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://s

Windows 8 Store Apps学习(66) 后台任务: 下载和上传

介绍 重新想象 Windows 8 Store Apps 之 后台任务 后台下载任务 后台上传任务 示例 扩展了 DownloadOperation 和 UploadOperation,以便下载进度或上传进度可通知 BackgroundTask/TransferModel.cs /* * 扩展了 DownloadOperation 和 UploadOperation,以便下载进度或上传进度可通知 */ using System; using System.ComponentModel; usin