文件写入 - 未经授权的访问异常

时间:2015-04-16 13:58:39

标签: ios8 xamarin.ios nsfilemanager system.io.file

尝试从iOS 8模拟器中运行的应用程序本地保存文件,并且我不断获取访问被拒绝的异常。

在之前的应用中,我使用以下代码来获取有效的文件路径:

Environment.GetFolderPath(Environment.SpecialFolder.Personal)

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

但我已经读过iOS 8,现在必须写成:

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

所以我使用以下代码生成.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)来检查目录是否在那里,是不是。

2 个答案:

答案 0 :(得分:1)

您错过了Path

上的urls[0].Path媒体资源
filePath = Path.Combine(urls[0].Path, "MyApp", "myFile.txt");

答案 1 :(得分:1)

这已在Xamarin.iOS 8.4中修复,因此,如果您使用的是最新版本的Xamarin,则可以毫无问题地使用Environment.GetFolderPath(如果您希望跨平台共享代码,这将非常有用)。