2012-04-14 1 views
1

Я пытаюсь программно создать папку с Cocoa.Создать папку (пакет) в Cocoa

Я написал NSString категорию, и мы получили следующую функцию: там

- (void)createAsFolder 
{ 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError* err = nil; 

    [fileManager createDirectoryAtPath:self withIntermediateDirectories:YES attributes:nil error:&err]; 

    if (err) 
    { 
     NSLog(@"ERROR : %@",err); 
    } 
} 

Итак, в нескольких словах, скажем, у нас есть NSString* path = @"/some/path/is/here";, мы можем создать его просто:

[path createAsFolder]; 

дело в том, хотя она прекрасно работает для обычных папок, это не тогда, когда указанный путь представляет собой пучок (то есть: с расширением)..

NSString* path = @"/this/is/a/path/to/some/bundle.bun"; 

[path createAsFolder]; 

Вышеуказанное не работает.

Любые идеи о том, как исправить это?

+0

У вас есть ошибка? –

+0

@EvanMulawski Nope, абсолютно БЕСПЛАТНАЯ ошибка (и абсолютно NO bundle/folder на месте, где она должна быть); Я проверяю все пути путем ведения журнала - они верны. Я в основном копирую целую файловую структуру из одного места в другое. И все копирует отлично, ИСКЛЮЧИТЕЛЬНО для комплектов (и их содержимого). –

ответ

1

Попробуйте вместо NSFileWrapper. Я думаю, что он может делать то, что вы хотите.

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSFileWrapper_Class/Reference/Reference.html

+0

Я изучил 'NSFileWrapper' как 10 раз и отклонил его как возможное решение. Вы сказали мне перепроверять, заставили меня пересмотреть ... Да, вы были на 100% прав. Я написал одну функцию для деревьев каталога, одну для копирования файла, одну для создания папки (которая не полностью работала, поскольку она наткнулась на пакеты/пакеты), и одна для перемещения по всему дереву и создания подузлов, в то время как все это можно было сделать с помощью двух паршивых строк ... Иногда я чувствую себя глупо ... Спасибо большое, приятель! :-) –

+0

Это был действительно выстрел в темноте. Я прочитал об этом несколько дней назад при изучении дизайна приложения на основе документов, и я просто подумал, что он может работать;) – thundersteele

+0

Хорошо ... выстрел! lol ;-) –

2

ОК, вот ответ (спасибо @thundersteele), если вы хотите скопировать полное дерево файлов из на места в другое:

NSFileWrapper* w = [[NSFileWrapper alloc] initWithPath:initialPath]; 

[w writeToFile:destinationPath atomically:YES updateFilenames:YES]; 

И да: это не имеет никакого проблема, являются ли вложенные папки пакетами/пакетами или что-то еще. Не так сложно, да? Всего 2 строки ... lol

+1

Этот метод обесценивается с OS X версии 10.6, вы должны использовать writeToURL: options: originalContentsURL: error: вместо этого. – rdelmar