zoukankan      html  css  js  c++  java
  • Metro Style App :Framwork与WinRT(一)

    在我们建完项目后可以发现 命名空间 有了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

  • 相关阅读:
    .Net Core 自动化部署:使用jenkins部署到linux docker容器运行
    .Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用
    React 使用browserHistory项目访问404问题
    使用Visual Studio Code和typescript 开发调试React Native项目
    java 基础
    javascript设计模式(1)——面向对象基础
    如何形成高度自律
    数据可视化-gojs插件使用技巧总结
    Git命令总结
    开源Git代码托管平台
  • 原文地址:https://www.cnblogs.com/trigged/p/2359140.html
Copyright © 2011-2022 走看看