четвер, 3 квітня 2014 р.

Objective-C - операции с каталогами

Понимание путей в Objective-C

Имена путей определяются с помощью конвенции UNIX. Таким образом каждый компонент пути отделяется косой чертой (/). Пути, которые не начинаются с косой черты интерпретируются относительно текущего рабочего каталога. Например, если текущий рабочий каталог /home/ObjC/MyApp/example.m то это считается полный путь. 

Кроме того, домашний каталог текущего пользователя может быть представлен с помощью тильды (~). Например путь ~/example.m ссылается на файл с именем example.m расположенный в домашнем каталоге текущего пользователя. Домашний каталог другого пользователя можно ссылаться, задав имя пользователя с ~. Например, ~ Джон/demo.m ссылается на файл, расположенный в домашнем каталоге пользователя с именем Джон.


Инициализация объекта NSFileManager


NSFileManager *fileManager;
fileManager = [NSFileManager defaultManager];

Определение текущей директории


Текущий рабочий каталог можно идентифицировать с помощью метода currentDirectoryPath экземпляра нашего объекта NSFileManager. Текущий путь возвращается из метода в виде объекта NSString:

NSFileManager *fileManager;
NSString *currentPath;

fileManager = [NSFileManager defaultManager];
currentPath = [fileManager currentDirectoryPath];
NSLog (@"Current directory is %@", currentPath);

Изменение пути каталога / директории на другой


Текущий рабочий каталог работающей программы Objective-C может быть изменен с помощью вызова метода changeCurrentDirectoryPath. Путь к каталогу назначения передается в качестве аргумента методу экземпляра в форме объекта NSString. Обратите внимание, что этот метод возвращает логическое ДА или НЕТ если операция прошла успешно:

NSFileManager *fileManager;
NSString *currentPath;

fileManager = [NSFileManager defaultManager];
currentPath = [fileManager currentDirectoryPath];
NSLog (@"Current directory is %@", currentPath);

if ([fileManager changeCurrentDirectoryPath:@"/temp/mydir"] == NO) {
        NSLog(@"Cannot change directory.");
}

currentPath = [fileManager currentDirectoryPath];
NSLog (@"Current directory is %@", currentPath);

Создание нового каталога / директории


Новый каталог создается с помощью метода экземпляра createDirectoryAtURL, в качестве аргумента поступает объект NSURL. Этот метод также принимает дополнительные аргументы в виде набора атрибутов для нового каталога и логическое значение, указывающее, должны ли быть созданы промежуточные каталоги, если они не существуют. Указав ноль (nil), метод будет использовать стандартные атрибуты:

NSFileManager *fileManager;

fileManager = [NSFileManager defaultManager];
NSURL *newDir = [NSURL fileURLWithPath:@"/tmp/mynewdir"];
[fileManager createDirectoryAtURL:newDir withIntermediateDirectories:YES attributes:nil error:nil];

Также после операции выполнения вернет ДА или НЕТ, в зависимости от результата выполнения.

Удаление каталога / директории

Существующий каталог может быть удален из файловой системы с помощью метода removeItemAtPath:
NSFileManager *fileManager;

fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:@"/tmp/mynewdir" handler:nil];

Переименование / Перемещение каталога / директории


Существующий файл или каталог может быть перемещен (переименован) с помощью метода moveItemAtURL. Этот метод принимает путь как аргумент в виде объектов NSURL и требует, чтобы путь назначения не существовал. Логический возвращаемый результат НЕТ, если произошел отказ над операцией:

NSFileManager *fileManager;

fileManager = [NSFileManager defaultManager];

NSURL *oldDir = [NSURL fileURLWithPath:@"/tmp/mynewdir"];
NSURL *newDir = [NSURL fileURLWithPath:@"/tmp/mynewdir2"];

[fileManager moveItemAtURL:oldDir toURL:newDir error:nil];

Получение списка файлов в каталоге / директории

Перечень файлов, содержащихся в указанном каталоге можно получить, используя метод contentsOfDirectoryAtPath. Этот метод принимает путь к каталогу в качестве аргумента и возвращает объект NSArray, содержащий имена файлов и подкаталогов в этом каталоге:

NSFileManager *fileManager;
NSString *currentPath;
NSArray *fileList;
int count;

fileManager = [NSFileManager defaultManager];
fileList = [fileManager contentsOfDirectoryAtPath:@"/tmp" error:nil];
count = [fileList count];

for (int i = 0; i < count; i++) {
        NSLog(@"%@", [fileList objectAtIndex:i]);
}

Получение атрибутов файла или каталога / директории

Атрибуты файла или каталога можно получить, используя метод attributesOfItemAtPath. Он принимает в качестве аргументов путь к каталогу и дополнительный объект NSError в котором хранится информация о любых ошибках. Результаты возвращаются в виде объекта словаря NSDictionary (подробнее о работе с словарных объектов относятся к объектам Objective-C NSDictionary . Ключами для этого словаря являются:

NSFileType
NSFileTypeDirectory
NSFileTypeRegular
NSFileTypeSymbolicLink
NSFileTypeSocket
NSFileTypeCharacterSpecial
NSFileTypeBlockSpecial
NSFileTypeUnknown
NSFileSize
NSFileModificationDate
NSFileReferenceCount
NSFileDeviceIdentifier
NSFileOwnerAccountName
NSFileGroupOwnerAccountName
NSFilePosixPermissions
NSFileSystemNumber
NSFileSystemFileNumber
NSFileExtensionHidden
NSFileHFSCreatorCode
NSFileHFSTypeCode
NSFileImmutable
NSFileAppendOnly
NSFileCreationDate
NSFileOwnerAccountID
NSFileGroupOwnerAccountID

Например, мы можем извлечь права, дату создания, тип файла для каталога /tmp, используя следующий фрагмент кода:
NSFileManager *fileManager;

NSDictionary *attribs;

fileManager = [NSFileManager defaultManager];
attribs = [filemgr attributesOfItemAtPath:@"/tmp" error:NULL];

NSLog(@"Created on %@", [attribs objectForKey: NSFileCreationDate]);
NSLog(@"File type %@", [attribs objectForKey: NSFileType]);
NSLog(@"POSIX Permissions %@", [attribs objectForKey: NSFilePosixPermissions]);

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments