2013-01-21 67 views
0

哇,這種方式比它需要的更復雜。誰能向我解釋爲什麼下面的代碼工作:帶Windows Rt和C的FileIO#

 string stringToWrite = "SomeStuff"; 
     Windows.ApplicationModel.Package package = Windows.ApplicationModel.Package.Current; 
     Windows.Storage.StorageFolder installedLocation = package.InstalledLocation; 
     var files = await installedLocation.GetFilesAsync(); 
     foreach (Windows.Storage.StorageFile sf in files) 
     { 
      if (sf.Name.Equals("log.txt")) 
      { 
       await FileIO.AppendTextAsync(sf, stringToWrite); 

      } 
     } 

然而下面的失敗,存取遭拒:

 Windows.ApplicationModel.Package package = Windows.ApplicationModel.Package.Current; 
     Windows.Storage.StorageFolder installedLocation = package.InstalledLocation; 
     var log = await installedLocation.GetFileAsync("log.txt"); 
     await FileIO.AppendTextAsync(log, stringToWrite); 

唯一的區別是通過由GetFilesAsync方法VS得到該文件返回文件循環按名字。順便說一下,按名稱獲取文件是可行的,因爲如果我在GetFileAsync中拼寫log.txt,我會得到一個異常。

很混亂....

+0

這條線是在您的兩個實施例中的差'var中的文件=等待installedLocation.GetFilesAsync();'根據MSDN方法'獲取在當前文件夾的頂級文件' – MethodMan

+0

我知道,一個獲得一個storageFile,另一個返回一個集合,然後循環獲取單個文件。就讀/寫而言,文件訪問應該是相同的,不是? – mrasmussen

+0

您是在談論Windows運行時還是您在談論稱爲Windows RT的操作系統? – Charles

回答

1

你應該使用您的安裝位置寫入任何文件。它應該是只讀MSDN: File Access/Permissions in Windows Store Apps

應用程序的安裝目錄是隻讀的位置。您無法通過文件選取器訪問安裝目錄。

您應該使用任一LocalRoaming,或者Temporary存儲位置。

請參閱此鏈接:MSDN: Quickstart Local Application Data

+0

但它爲什麼在其中一個案件中起作用? – svick

+0

似乎工作,謝謝SiLo。不知道爲什麼我可以寫入文件,如果我通過集合,但不是如果我通過名稱獲得文件的句柄。我應該看到,安裝路徑並不是可以寫入的推薦位置。 – mrasmussen

+0

你是如何第一次創建'log.txt'的?我試圖複製這個,我甚至可以在那裏獲得文件的唯一方法是首先通過Windows資源管理器創建文件,然後它將工作。我有權拒絕嘗試在代碼中創建/追加到文件的例外。 – Erik