2012-03-30 3 views
0

У меня возникли проблемы с созданием папки с использованием NSFileManager в MacOS X. Я создаю программное обеспечение в Lion, если это что-то изменит.Получение разрешений для создания новой папки с помощью NSFileManager

В любом случае. Структура программы выглядит примерно так:

  1. Заполните несколько полей.
  2. Выберите папку, используя NSOpenPanel.
  3. Программа генерирует имя новой папки из полей.
  4. Создайте папку с этим именем в выбранной папке.

код, который должен создать папку выглядит следующим образом:

NSString *name = [pnameField stringValue]; 
NSString *number = [self parseVerknr:[pnumberField stringValue]]; 
NSString *date = [pdateField stringValue]; 
NSString *folderName; 

//Here I generate the folder name from some rules and stuffsies 
//It ends up as something like: 13245_08 - cp. - name 

NSOpenPanel *myPanel = [NSOpenPanel openPanel]; 

    myPanel.canChooseFiles = NO; 
    myPanel.canChooseDirectories = YES; 
    myPanel.canCreateDirectories = YES; 

    [myPanel beginWithCompletionHandler:^(NSInteger result){ 

     if (result==NSFileHandlingPanelOKButton){ 

      NSFileManager *myManager = [[NSFileManager alloc] init]; 

      NSError *merror; 

      NSString *directoryString = [NSString stringWithFormat:@"%@%@", [myPanel.URL absoluteString], folderName]; 

      //Here the directory string looks like file://localhost/Users/username/Documents/folders/12345_09 - cp. - Koop 
      directoryString = [directoryString substringFromIndex:6]; 
      //After it looks like: /localhost/Users/username/Documents/folders/12345_09 - cp. - Koop 
      NSLog(@"directory: %@", directoryString); 

      [myManager createDirectoryAtPath:directoryString withIntermediateDirectories:YES attributes:nil error:&merror]; 

      NSLog(@"%@", [merror localizedDescription]); 
     } 

    }]; 

Если я не беру подстроку из индекса 6, я получаю большой стек ошибок (пытался взять его из 16 тоже сделал то же самое). Если я использую разделительную строку я получаю следующее сообщение об ошибке:

You don’t have permission to save the file “localhost” in the folder “PK Bear”. 

С PK Медведь имя моего «жесткий диск» Я предполагаю, что программа должна получить разрешение на доступ к жесткому диску. Я просто не знаю, как это сделать.

Любая помощь была бы принята с благодарностью.

ответ

1

Проблема заключается в том, как вы создаете строку пути. В частности, -[NSURL absoluteString] возвращает строковое представление URL-адреса, а не строку пути к файлу. Вы должны использовать методы NSURL и NSString для работы с путями. Как поясняется в documentation, -[NSURL path] возвращает строку пути, подходящую для ввода в методы NSFileManager.

Попробуйте это:

NSString *directoryString = [[myPanel.URL path] stringByAppendingPathComponent:folderName]; 
[myManager createDirectoryAtPath:directoryString withIntermediateDirectories:YES attributes:nil error:&merror]; 
+0

Работал как шарм, спасибо большое! Я обязательно прочитаю разницу между ними. – Bjorninn

1

Вы перепутать (Файл-) URL-адресов и (UNIX) пути.

Вы должны создать путь к каталогу следующим образом:

NSString *directoryString = [[myPanel.URL path] stringByAppendingPathComponent:folderName]; 
if (! [myManager createDirectoryAtPath:directoryString withIntermediateDirectories:YES attributes:nil error:&merror]) { 
    NSLog(@"%@", [merror localizedDescription]); 
} 

Ключ используется path вместо absoluteString.

Кроме того: вы не можете получить доступ к объекту merror, если только метод, который его создает, не возвращает NO (или что бы то ни было условие ошибки).

Вы никогда не должны возиться с одиночными символами в цепочках строк (как и с substringFromIndex:). Это считается сложной задачей перед лицом кодов Unicode и фрагментов кода и комбинированных символов.

+0

Спасибо за ответ. Мне нужно лучше изучить объект NSError, спасибо за указатель. – Bjorninn

Смежные вопросы