Работаем с файловой системой в iOS

Для записи файла нужно определить путь, по которому осуществлять запись. Используем функцию NSSearchPathForDirectoriesInDomains:

NSArray *a = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
if (a.count) {
    NSString *cacheDirectory = [a objectAtIndex:0];
}

В строке cacheDirectory получим путь внутри нашего приложения вида:

/Application/A3E0C88E-5345-4D03-A4BA-50EAE89006EA/Library/Caches

NSCachesDirectory — указывает на директорию для временного хранения кэша. Если нужен каталог для долговременного хранений файлов нужно использовать NSDocumentDirectory.

Чтобы получить полной путь к файлу, нужно добавить еще имя файла:

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"MyFileName.txt"];

Теперь мы можем сохранить в файл, например массив:

NSArray *a = @[@"Hello", @"World"];
[a writeToFile:path atomically:YES];

А затем прочитать:

NSArray *a = [NSArray arrayWithContentsOfFile:path];

Атрибуты файлов

Используя NSFileManager мы можем получать атрибуты файлов, например дату изменения:

- (NSDate *)fileModificationDateOfFile:(NSString *)path
{
    NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path
                                                                                error:nil];
    if (attributes) {
        NSDate *date = [attributes fileModificationDate];
        return date;
    }
    return nil;
}

Полезные функции, которые можно добавить в категорию, например NSString.

+ (NSString *)pathForDirectory:(NSUInteger)directory forFile:(NSString *)path
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(directory, NSUserDomainMask, YES);
    if (paths.count) {
        return [paths[0] stringByAppendingPathComponent:path];
    }
    return nil;
}

+ (NSString *)pathForCachesForFile:(NSString *)path
{
    return [NSString pathForDirectory:NSCachesDirectory forFile:path];
}

+ (NSString *)pathForDocumentsForFile:(NSString *)path
{
    return [NSString pathForDirectory:NSDocumentDirectory forFile:path];
}

Опубликовано: Март 27, 2015 ~ obj-c, Foundation