Вход/Регистрация
Программирование на Objective-C 2.0
вернуться

Кочан Стивен

Шрифт:

Табл. 16.1. Наиболее распространенные файловые методы класса NSFileManager Метод Описание– (NSData *) contentsAtPath: path Читает данные из файла. -(BOOL) createFileAtPath: path contents: (BOOL) data attributes: attr Пишет данные (data) в файл -(BOOL) removeFileAtPath: path handler: handler Удаляет файл. -(BOOL) movePath: from toPath: to handler: handler Переименовывает или перемещает файл (to не может существовать заранее). -(BOOL) copyPath: from toPath: to handler: handler Копирует файл (to не может существовать заранее). -(BOOL) contentsEqualAtPath: path1 andPath: path2 Сравнивает содержимое двух файлов. -(BOOL) fileExistsAtPath: path Проверяет существование файла. -(BOOL) isReadableRleAtPath: path Проверяет, существует ли файл и доступен ли он для чтения. -(BOOL) isWritableFileAtPath: path Проверяет, существует ли файл и доступен ли он для записи. -(NSOictionary *) fileAttributesAtPath: path traverseLink: (BOOL) flag Читает атрибуты файла. -(BOOL) changeFileAttributes: attr atPath: path Изменяет атрибуты

Каждый из этих файловых методов вызывается в объекте NSFileManager, который создается при отправке сообщения defauttManager этому классу. NSFileManager *fm; ... fm = [NSFileManager defaultManager];

Например, для удаления файла todolist из текущей папки нужно создать сна-чала объект класса NSFileManager, как показано выше, и затем вызвать метод removeFileAtPath:. [fm removeFileAtPath: @"todolist" handler: nil];

Возвращаемый результат можно проверить, чтобы убедиться, что удаление этого файла выполнено успешно. if ([fm removeFileAtPath: @"todolistn handler: nil] == NO) { NSLog (@"Couldn’t remove file todolist"); (Нельзя удалить файл todolist) return 1; }

Словарь атрибутов позволяет, в частности, указывать разрешения доступа к создаваемому файлу или получать либо изменять информацию для существую-щего файла. Разрешения по умолчанию задаются при создании файла с указанием значения nil в качестве этого параметра. Метод fileAttributesAtPadiitraverseUnk: возвращает словарь, содержащий атрибуты указанного файла. Параметр traverseLink: имеет значение YES или N0 для символических ссылок. Если файл задан символической ссылкой и указано значение YES, то возвращаются атрибуты файла привязки; если указано значение N0, то возвращаются атрибуты самой привязки (ссылки).

Для уже существующих файлов в словарь атрибутов включается такая ин-формация, как владелец файла, размер файла, дата его создания, и т.д. Каждый атрибут можно извлекать из словаря по его ключу; все эти ключи определены в . Например, NSFileSize - это ключ для атрибута размера файла.

В программе 16.1 показаны основные операции с файлами. В этом примере предполагается, что в текущей папке есть файл testfile, содержащий следующие три строки текста. This is a test file with some data in it. (Это тестовый файл с некоторыми данными.) Here’s another line of data. (Это еще одна строка данных.) And a third. (И третья.) // Основные файловые операции // Предполагается, что существует файл "testfile" // в текущей рабочей папке #import <Foundation/NSObject.h> #import <Foundation/NSString.h> #import <Foundation/NSFileManager.h> #import <Foundation/N$AutoreleasePool.h> #import <Foundation/NSDictionary.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString *fName = @"testfile"; NSFileManager *fm; NSDictionary *attr; // Нужно создать экземпляр filemanager fm = [NSFileManager defaultManager]; // Сначала проверим существование нашего тестового файла if ([fm fileExistsAtPath: fName] == NO) { NSLog (@"File doesn’t exist!"); (Файл не существует) return 1; } // Теперь создадим копию if ([fm copyPath: fName toPath: @"newfile" handler; nil] == NO) { NSLog (@"File copy failed!"); (Копирование файла не выполнено) return 2; } // Проверим эти два файла на идентичность if ([fm contentsEqualAtPath: fName andPath: @"newfile"] == NO) { NSLog (@"Files are not equal!"); (Файлы не равны) return 3; } // Теперь переименуем копию if {[fm movePath: @"newfile" toPath: @"newfile2" handler: nil] == NO) { NSLog (@"File rename failed!"); (Переименование файла не выполнено) return 4; } // Получим размер newfile2 if ((attr = [fm fileAttributesAtPath: @"newfile2" traverseLink: NO]) == nil) { NSLog (@"Couldn't get file attributes!"); (Невозможно получить атрибуты файла) return 5; } NSLog (@"File size is %i bytes", [[attr objectForKey: NSFileSize] intValue]); // И, наконец, удалим исходный файл if ([fm removeFileAtPath: fName handler; nil] == NO) { NSLog (@"File removal failed!"); (невозможно удалить файл) return 6; } NSLog (@"All operations were successful!"); // Вывод содержимого нового созданного файла NSLog(@"%@" [NSString stringWithContentsOfFile: @"newfile2" encoding: NSUTF8StringEncoding error: nil]); [pool drain]; return 0; }

Вывод программы 16.1 File size is 84 bytes (Размер файла 84 байта) All operations were successful! (Все операции выполнены успешно) This is a test file with some data in it. (Это тестовый файл с некоторыми данными.) Here's another line of data. (Это еще одна строка данных.) And a third. (И третья.)

Программа сначала проверяет, существует ли файл testfile. Если да, то про-грамма создает его копию и затем проверяет эти файлы на совпадение. Опытные пользователи UNIX обратят внимание, что мы не можем переместить или копировать файл в определенную папку, просто указав эту целевую папку для методов copy Path: toPath: и movePath:toPath:; в этой папке должно быть явно указано имя файла.

Примечание. Мы можем создать testfile с помощью Xcode, выбрав New File... (создать файл) в меню File. В появившейся левой панели нужно выделить Other (Другое) и затем выбрать в правой панели Empty File (Пустой файл). Введите testfile как имя файла и убедитесь, что он создается в той же папке, что и выпол-няемый файл — в вашей папке проекта Build/Debug.

Метод movePath:toPath: можно использовать для перемещения файла из одной папки в другую. (Или для перемещения целой папки.) Если оба пути указывают на одну и ту же папку (как в нашем примере), то результатом будет переименование файла. Например, в программе 16.1 мы переименовываем файл newfile в newfile2.

Как указывалось в таблице 16.1, при выполнении операций копирования, переименования или перемещения указанный целевой файл (to) не может су-ществовать заранее, иначе операция не будет выполнена.

Размер файла newfile2 определяется с помощью метода fileAttributesAtPath:traverseUnk:. Мы проверяем, что возвращается непустой (не nil) словарь, и затем используем метод NSDictionary objectForKey: для получения из словаря размера файла с помощью ключа NSFileSize. Затем выводится целое значение из словаря.

Метод removeFileAtPath:handler: удаляет наш исходный файл testfile.

И, наконец, метод NSString stringWithContentsOfFile: читает содержимое файла newfile2 в строковый объект, который затем передается как аргумент в NSLog для вывода.

В программе 16.1 проверяется успешность выполнения каждой файловой операции. Если операция не выполнена, выводится сообщение об ошибке с помощью NSLog, и программа завершает работу, возвращая ненулевое значение состояния выхода. Каждое ненулевое значение, которое соответствует ошибке в программе, уникальным образом определяет тип ошибки. Если вы пишете средства, запускаемые из командной строки, это полезный способ, поскольку другая программа может проверять возвращаемое значение, например, из сце-нария оболочки. Работа с классом NSData

  • Читать дальше
  • 1
  • ...
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: