2015-04-16 56 views
1

試圖從在iOS 8模擬器中運行的應用程序本地保存文件,並且我不斷獲取訪問被拒絕的例外。文件寫入 - 未經授權的訪問異常

在以前的應用程序,我用下面的代碼來獲得一個有效的文件路徑:

Environment.GetFolderPath(Environment.SpecialFolder.Personal) 

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 

但我讀過,與iOS 8這已經一定要寫成:

NSFileManager.DefaultManager.GetUrls(NSSearchPathDirectory.DocumentDirectory, 
            NSSearchPathDomain.User)[0] 

所以我使用的followi NG代碼試圖保存它時會產生一個.txt文件的文件路徑和接收拒絕訪問異常:

public void SaveMyFile(string content) 
{ 
    NSUrl[] urls; 
    string filePath; 
    // 
    urls = NSFileManager.DefaultManager.GetUrls(NSSearchPathDirectory.DocumentDirectory, 
               NSSearchPathDomain.User); 
    filePath = Path.Combine(urls[0].Path, "MyApp", "myFile.txt"); 
    File.WriteAllText(filePath, content); 
} 

因此,它給了我,也文件路徑否認的就是/Users/Idox/Library/Developer/CoreSimulator/Devices/92498E38-7D50-4081-8A64-83061DC00A86/data/Containers/Data/Application/C35B3E98-C9E3-4ABA-AA7F-CD8419FA0EA5/Documents/MyApp/myFile.txt訪問。

我想知道是否有某些設置需要切換,以使應用程序可以對此目錄進行寫入訪問,或者目錄本身無效。

我也打過電話Directory.Exists(string path)檢查目錄是否在那裏,它是。

回答

1

你缺少urls[0].Path

filePath = Path.Combine(urls[0].Path, "MyApp", "myFile.txt"); 
+0

謝謝,但這是問題代碼中的錯字,哎呀!我不認爲它會編譯沒有'.Path';) –

1

這是固定在Xamarin.iOS 8.4Path屬性,因此,如果您使用的是最新Xamarin的版本,你可以使用Environment.GetFolderPath沒有問題(如果你想這是有用的跨平臺共享代碼)。

+0

我現在在Mac上使用Xamarin.iOS 8.9與Xamarin Studio,改回使用'Environment.GetFolderPath'仍然導致未經授權的訪問例外。我需要看看在設備而不是模擬器上測試時是否仍然如此。 –