这是一个我相信Xcode开发人员也可以回答的问题。我在Xamarin下面有我的代码截图。
为什么我会收到未经授权的访问异常?我应该能够写到文件夹吗?
var webClient = new WebClient();
//var documentsFolder = Environment.GetFolderPath (Environment.SpecialFolder.Personal); // iOS 7 and earlier
var documentsFolder = NSBundle.MainBundle.BundlePath;
var fileNameAndPath = Path.Combine (documentsFolder, "verses.xml");
if(!File.Exists(documentsFolder)){
Directory.CreateDirectory(documentsFolder);
if(!File.Exists(fileNameAndPath)){
//File.SetAttributes(fileNameAndPath, FileAttributes.Normal);
File.Create(fileNameAndPath);
//Throws exception here.
}
}
和错误:
访问路径" /var/mobile/Applications/1F95D694-BBA5-4FB3-AE6C-0C2CDD9DEDD8/comexample.app/verses.xml"被拒绝
访问路径' /private/var/mobile/Applications/1F95D694-BBA5-4FB3-AE6C-0C2CDD9DEDD8/Documents/verses.xml'被拒绝。
我尝试了两种路径,但我拒绝访问。
答案 0 :(得分:2)
BundlePath不是iOS应用程序的可写区域。
来自http://developer.xamarin.com/guides/ios/application_fundamentals/working_with_the_file_system/
的Xamarin笔记以下代码段将在可写文档区域中创建一个文件。
var documents =
Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments); // iOS 7 and earlier
var filename = Path.Combine (documents, "Write.txt");
File.WriteAllText(filename, "Write this text into a file");
iOS 8页面上有一条注释,要求更改文档文件夹
var documents = NSFileManager.DefaultManager.GetUrls (NSSearchPathDirectory.DocumentDirectory,
NSSearchPathDomain.User) [0];
答案 1 :(得分:1)
假设您使用的是iOS 8,则文档目录未连接到捆绑路径。使用函数NSSearchPathForDirectoriesInDomains()
(或URLsForDirectory:inDomains:
)查找文档目录。
答案 2 :(得分:0)
我认为它应该是Directory.Exists(),您可以在其中检查目录是否存在:
if(!File.Exists(documentsFolder)){