在我們建完項目后可以發現 命名空間 有了Windows 和System 2大頂namespace
這也就是Framwork和WinRT 最明顯的區別,至於Framework 和WinRT如何交互 大家請接下來看,MS在這方面做了很好的優化
下面我們以一個實例說明,再次之前先提出一些要點
1. 在Metro Style App 中淡化了硬盤這種概念,所以我們無法直接通過路徑訪問文件,唯一可以直接 訪問的是Libraries下面的文件夾和文件夾
2. 由於Framework和WinRT的同時存在 導致雙方的一些API 功能有重疊的情況,所以在這種情況下 一些功能重疊的API被統一,Framework 中IO就沒有了Directory,File 等API了 全部換成了Windows.Storage 下StorageFolder,StorageFile,記得我們前面的那副圖么 就是最好的說明
我們要做的是在用戶目錄下寫入一些日志文件~當然有更好的位置 稍后再提
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飽含的文件件 包括
返回類型是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 中加入支持的類型即可






