Как сделать каталог iOS? - PullRequest
       3

Как сделать каталог iOS?

29 голосов
/ 07 ноября 2011

Хорошо,

Итак, у меня есть приложение Cydia, которое мне нужно обновить. Я знаю, что в приложениях Cydia нет папки «Документы», поэтому вы должны создать ее. А вот как я делал это раньше в iOS 4 (который не работает в iOS 5):

mkdir("/var/mobile/Library/APPNAME", 0755);
mkdir("/var/mobile/Library/APPNAME/Documents", 0755);

NSString *foofile = @"/var/mobile/Library/APPNAME/Documents/database.db";
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:foofile];

if (fileExists == TRUE) {
    NSLog(@"already exists");
} else {
    NSLog(@"doesn't exists");
    NSFileManager *fileManager = [[NSFileManager defaultManager]autorelease];
    NSError *error;
    NSString *documentDBFolderPath = @"/var/mobile/Library/APPNAME/Documents/database.db";

    NSString *resourceDBFolderPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"database.db"];
    [fileManager copyItemAtPath:resourceDBFolderPath toPath:documentDBFolderPath error:&error];

}

Я также включил код, который также копирует файл базы данных в эту папку. Это не работает (даже когда я создаю папку вручную через SSH).

Пожалуйста, помогите! Спасибо.

Ответы [ 5 ]

60 голосов
/ 07 ноября 2011

Вот метод, который я сделал для создания каталогов

-(void)createDirectory:(NSString *)directoryName atFilePath:(NSString *)filePath
{
    NSString *filePathAndDirectory = [filePath stringByAppendingPathComponent:directoryName];
    NSError *error;

    if (![[NSFileManager defaultManager] createDirectoryAtPath:filePathAndDirectory
                                   withIntermediateDirectories:NO
                                                    attributes:nil
                                                         error:&error])
    {
        NSLog(@"Create directory error: %@", error);
    }
}
5 голосов
/ 07 ноября 2011

Попробуйте использовать createDirectoryAtURL:withIntermediateDirectories:attributes:error:.

NSFileManager Ссылка на класс :

createDirectoryAtURL:withIntermediateDirectories:attributes:error:

Создает каталог с заданными атрибутами по указанному пути.

Параметры

url - URL-адрес файла, который указывает каталог для создания. Если вы хотите указать относительный путь, вы должны установить текущий рабочий каталог перед созданием соответствующего NSURL объект. Этот параметр не должен быть равен нулю.

createIntermediates - Если YES, этот метод создает любой несуществующий родительские каталоги как часть создания каталога в URL. Если NO, этот метод не работает, если какой-либо из промежуточных родительских каталогов делает не существует. Этот метод также не работает, если какой-либо из промежуточного пути элементы соответствуют файлу, а не каталогу.

attributes - Атрибуты файла для нового каталога и всех вновь создаваемых промежуточные каталоги. Вы можете установить номер владельца и группы, права доступа к файлу и дата изменения. Если вы укажете ноль для этого параметр или опустить конкретное значение, одно или несколько значений по умолчанию используется, как описано в обсуждении. Для получения списка ключей вы можете включить в этот словарь, см. списки разделов «Константы» (страница 54) глобальные константы, используемые в качестве ключей в словаре атрибутов. Немного из ключей, таких как NSFileHFSCreatorCode и NSFileHFSTypeCode, сделать не относится к каталогам.

error - На входе указатель на объект ошибки. Если возникает ошибка, этот указатель установлен на фактический объект ошибки, содержащий ошибку Информация. Вы можете указать nil для этого параметра, если вы этого не сделаете хочу информацию об ошибке.

Возвращаемое значение
YES если каталог был создан или уже существует или НЕТ, если произошла ошибка.

3 голосов
/ 07 ноября 2011

Проверьте Ссылка класса NSFileManager . Для создания папок вам необходимо createDirectoryAtPath:withIntermediateDirectories:attributes:error:

1 голос
/ 19 июля 2016

В Swift возвращает true, если существует или создан.

func ensureDirectoryExists(path:String) -> Bool {

    if !NSFileManager.defaultManager().fileExistsAtPath(path) {
        do {
            try NSFileManager.defaultManager().createDirectoryAtPath(path, withIntermediateDirectories: true, attributes: nil)
        } catch {
            print(error)
            return false
        }
    }
    return true
}
1 голос
/ 22 марта 2013
...