程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8 Store Apps學習70) 其它: 文件壓縮和解壓縮

Windows 8 Store Apps學習70) 其它: 文件壓縮和解壓縮

編輯:關於.NET

重新想象 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

<Page
    x:Class="XamlDemo.Feature.StoreDemo"
    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">
    
            <Button Name="btnOpenAppInStore" Content="跳轉到 Windows 商店中指定 app 的主頁" Click="btnOpenAppInStore_Click"  />
    
            <Button Name="btnReviewAppInStore" Content="在 Windows 商店中評論指定的 app" Click="btnReviewAppInStore_Click" Margin="0 10 0 0"  />
    
            <Button Name="btnSearchAppInStore" Content="在 Windows 商店中通過關鍵字搜索 app" Click="btnSearchAppInStore_Click" Margin="0 10 0 0"  />
    
            <Button Name="btnUpdateAppInStore" Content="跳轉到 Windows 商店中的 app 更新頁" Click="btnUpdateAppInStore_Click" Margin="0 10 0 0"  />
    
    
            <TextBlock Name="lblMsg" FontSize="14.667" Text="與購買相關的部分,請參見 code-behind 中的代碼" Margin="0 10 0 0"  />
    
        </StackPanel>
    </Grid>
</Page>

Feature/StoreDemo.xaml.cs

/*
 * 演示與 Windows 商店相關的操作
 * 
 * 注:
 * 測試時可以使用 CurrentAppSimulator 來模擬購買行為,msdn 上有對應的 sample 可以下載 
 */
    
using System;
using Windows.ApplicationModel.Store;
using Windows.System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
    
namespace XamlDemo.Feature
{
    public sealed partial class StoreDemo : Page
    {
        public StoreDemo()
        {
            this.InitializeComponent();
        }
    
        private async void btnOpenAppInStore_Click(object sender, RoutedEventArgs e)
        {
            // 跳轉到 Windows 商店中指定 app 的主頁(PDP - program display page; PFN - package family name)
			// 查看本欄目
		

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"  />
    
    <!--
        以下簡介如何將網站連接到 Windows 應用商店應用    
        關於 app 與 web 的更多內容請參見:http://msdn.microsoft.com/zh-cn/library/ie/hh781489(v=vs.85).aspx
    -->
    
    <!--包名稱,系統會通過此值在本地查找應用,如果有則右下角的按鈕會顯示“切換到 xxx 應用”,選中後會啟動對應的應用-->
    <meta name="msApplication-ID" content="microsoft.microsoftskydrive"  />
    
    <!--包系列名稱,當無法通過包名稱查找到本地應用時,右下角的按鈕會顯示“獲取此網站的應用”,選中後會通過包系列名稱在 Windows 商店中查找-->
    <meta name="msApplication-PackageFamilyName" content="microsoft.microsoftskydrive_8wekyb3d8bbwe"  />
    
    <!--
        啟動對應的應用時,傳遞過去的參數
    
        app 中通過如下方法獲取參數
        protected override void OnLaunched(LaunchActivatedEventArgs args)
        {
            if (!String.IsNullOrEmpty(args.Arguments)) 
            {
                
            }
        }
    -->
    <meta name="msApplication-Arguments" content="hello webabcd"  />
    
    <title>app and web</title>
</head>
<body>
    metro ie 打開,可以通過右下角的按鈕“獲取此網站的應用”或“切換到 xxx 應用”
</body>
</html>

4、演示幾個 Core 的應用

Feature/CoreDemo.xaml.cs

/*
 * 演示幾個 Core 的應用
 */
    
using System;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
    
namespace XamlDemo.Feature
{
    public sealed partial class CoreDemo : Page
    {
        public CoreDemo()
        {
            this.InitializeComponent();
        }
    
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            CoreDispatcherDemo();
    
            CoreWindowDemo();
    
            CoreApplicationDemo();
        }
    
        private async void CoreDispatcherDemo()
        {
            // CoreDispatcher - 消息調度器
			// 查看本欄目
		
							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved