2014-11-10 4 views
0

Это вопрос, который я уверен, разработчики Xcode также могут ответить. У меня есть скриншот моего кода ниже в Xamarin.iPhone 4S - исключение UnAuthorized Access

Почему я получаю исключение несанкционированного доступа? Я должен был бы правильно записать в папку с документами?

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' отклоняется.

Я пробовал оба пути, и я получаю отказ в доступе.

ответ

1

Предполагая, что вы находитесь на iOS 8, каталог документов не подключен к пути пакета. Используйте функцию NSSearchPathForDirectoriesInDomains() (или URLsForDirectory:inDomains:), чтобы найти каталог документов.

+0

Я бег IOS 7.1.2 – james0200101

+0

Независимо от того, какой версии прошивки вы работаете , вы должны использовать 'NSSearchPathForDirectoriesInDomains'. Я не знаю, было ли когда-либо целесообразным создание пути к документам без этой функции. (Доступно с iOS 2.0) –

+1

Я бы попробовал функцию в любом случае. Даже если это все еще дает вам проблему, по крайней мере, вы будете использовать рекомендуемый подход. –

0

Я предполагаю, что это должно быть Directory.Exists(), где вы проверить, если каталог существует:

if(!File.Exists(documentsFolder)){

2

BundlePath не записываемая область для IOS приложений.

С Xamarin отмечает в http://developer.xamarin.com/guides/ios/application_fundamentals/working_with_the_file_system/

Следующий фрагмент создает файл в область записываемых документов.

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"); 

Там записка на странице для прошивки 8, что изменение необходимо, чтобы получить папку документы

var documents = NSFileManager.DefaultManager.GetUrls (NSSearchPathDirectory.DocumentDirectory, 
    NSSearchPathDomain.User) [0];