1

尝试从运行在 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)检查目录是否在那里,它是。

4

2 回答 2

1

你错过了Path财产urls[0].Path

filePath = Path.Combine(urls[0].Path, "MyApp", "myFile.txt");
于 2015-04-16T15:52:42.423 回答
1

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

于 2015-04-17T00:01:19.083 回答