在我们建完项目后可以发现 命名空间 有了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 中简单的配置下image
 
把Capabilities 中Document Library Access 选中这样我们就可以访问Docment 文件夹,其次
image
在Declarations 中加入程序支持的文件类型  ,这里选择 
File Type Associations,在Supported File Type 中加入支持的类型即可

 

image

 posted on 2012-02-20 11:33  沐訫  阅读(2636)  评论(4编辑  收藏  举报