Metro Style App :Framwork与WinRT(一)

本文介绍了在MetroStyleApp中使用WinRT和Framework进行文件操作的方法。文章详细讲解了如何在用户目录下写入日志文件,并展示了如何利用ASXX()在两种环境下进行高效的API交互。此外还介绍了如何配置Package.appxmanifest以获取文档库访问权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我们建完项目后可以发现 命名空间 有了Windows 和System 2大顶namespace

image

这也就是Framwork和WinRT 最明显的区别,至于Framework 和WinRT如何交互 大家请接下来看,MS在这方面做了很好的优化

下面我们以一个实例说明,再次之前先提出一些要点

1. 在Metro Style App 中淡化了硬盘这种概念,所以我们无法直接通过路径访问文件,唯一可以直接 访问的是Libraries下面的文件夹和文件夹

2. 由于Framework和WinRT的同时存在 导致双方的一些API 功能有重叠的情况,所以在这种情况下 一些功能重叠的API被统一,Framework 中IO就没有了Directory,File  等API了 全部换成了Windows.Storage 下StorageFolder,StorageFile,记得我们前面的那副图么 就是最好的说明

image

我们要做的是在用户目录下写入一些日志文件~当然有更好的位置 稍后再提

        async void WriteFiles()
        {
            string winRTLog = "WinRT ";
            string frameWorkLog = "Framwork";
            StorageFolder folder = KnownFolders.DocumentsLibrary;
            StorageFile files = await folder.CreateFileAsync("mydata.txt", CreationCollisionOption.ReplaceExisting);
            IRandomAccessStream randomAccessStream = await files.OpenAsync(FileAccessMode.ReadWrite);
            try
            {
                // Framework to WinRT
                Stream stream = randomAccessStream.OpenWrite();
                

var output = stream.AsOutputStream();

                DataWriter dataWriter = new DataWriter(output);
                dataWriter.WriteString(winRTLog);
                await dataWriter.StoreAsync();
                output.FlushAsync().Start();


                //WinRT to Framework
                IOutputStream outPutStream = randomAccessStream.GetOutputStreamAt(randomAccessStream.Size);
                

Stream winrtStream = outPutStream.AsStream();

                BinaryWriter bw = new BinaryWriter(winrtStream);
                await Task.Run(() =>
                {
                    bw.Write(frameWorkLog);
                });
                outPutStream.FlushAsync().Start();
            }
            catch (Exception ex)
            {
                MessageDialog dlg = new MessageDialog(ex.Message);
                dlg.ShowAsync().Start();
            }
        }

一开始应该是这样 我们需要有文件存放的地方

StorageFolder

 folder = 

KnownFolders

.DocumentsLibrary;
KnownFolders是个结构体 里面包含了已知下的Libraries饱含的文件件 包括
 

image

返回类型是StorageFolder 也就是 原来的4.0 中的Directory

然后我们需要创建 文件这个对象 ,

代码很简单展示了2种 用WinRT 和Framework 的API 来写入文件,最主要的是 MS做了大量优化利用ASXX()  使得我们可以很方便的 在2者中交互
光靠上面的代码 ,是不能访问这些文件 和文件夹的
我们需要来在前文提到的Package.appxmanifest 中简单的配置下
 
把Capabilities 中Document Library Access 选中这样我们就可以访问Docment 文件夹,其次
在Declarations 中加入程序支持的文件类型  ,这里选择 
File Type Associations,在Supported File Type 中加入支持的类型即可

 

image

转载于:https://www.cnblogs.com/trigged/archive/2012/02/20/2359140.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值