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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM