stringByAppendingPathComponent:@"MyFile.txt"];
char bytes[4] = {'a', 'b', 'c', 'd'};
NSData *dataFromBytes = [[NSData alloc] initWithBytes: bytes
length: sizeof(bytes)];
if ([dataFromBytes writeToFile: filePath atomically: YES]){
NSData *readData = [[NSData alloc] initWithContentsOfFile: filePath];
if ([readData isEqualToData: dataFromBytes]){
NSLog(@"The data read is the same data as was written to disk.");
} else {
NSLog(@"Failed to read the data from disk.");
}
} else {
NSLog(@"Failed to save the data to disk.");
}
См. также
Раздел 12.0.
12.3. Создание каталогов на диске
Постановка задачи
Требуется возможность создавать на диске каталоги и сохранять в них определенные файлы из вашего приложения.
Решение
Пользуйтесь методом экземпляра createDirectoryAtPath: withIntermediateDirectories: attributes: error:, относящимся к классу NSFileManager, как показано далее:
— (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString *tempDir = NSTemporaryDirectory();
NSString *imagesDir = [tempDir stringByAppendingPathComponent:@"images"];
NSError *error = nil;
if ([fileManager createDirectoryAtPath: imagesDir
withIntermediateDirectories: YES
attributes: nil
error:&error]){
NSLog(@"Successfully created the directory.");
} else {
NSLog(@"Failed to create the directory. Error = %@", error);
}
self.window = [[UIWindow alloc]
initWithFrame: [[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
Обсуждение
API, предоставляемые классом NSFileManager, очень просты в использовании. Ничего удивительного в том, что для сохранения каталогов на диске эти API требуют написания всего нескольких строк кода. На первый взгляд метод createDirectoryAtPath: withIntermediateDirectories: attributes: error: может показаться страшноватым, но на самом деле не все так плохо. В дальнейшем я расскажу о различных параметрах, которые можно передать этому методу:
• createDirectoryAtPath — путь к тому каталогу, который требуется создать;
• withIntermediateDirectories — логический параметр. Если он имеет значение YES, то перед созданием конечного каталога метод создаст и все промежуточные каталоги. Например, если вы хотите создать каталог images, вложенный в каталог data, который, в свою очередь, вложен в каталог tmp, а каталог data пока не создан, то можете приказать этому методу создать каталог tmp/data/images/, установив для параметра withIntermediateDirectories значение YES. В таком случае система создаст и каталог data, и каталог images;
• attributes — словарь атрибутов, который можно передать системе. Эти атрибуты будут определять детали создания каталога. Здесь мы не будем использовать этот параметр, чтобы не усложнять пример. Но тут вы можете изменять такую информацию, как дата и время внесения изменений, дата и время создания, а также при желании и другие атрибуты созданного каталога;
• error — данный параметр принимает указатель на объект-ошибку типа NSObject. Этот объект будет заполняться любыми ошибками, которые могут возникать в процессе создания каталога. В принципе, целесообразно передавать объект-ошибку в этом параметре, так что, если он завершится неудачно (возвратит NO), вы сможете обратиться к ошибке и определить, что именно пошло не так.
См. также
Раздел 12.1.
12.4. Перечисление файлов и каталогов
Постановка задачи
Вы хотите построить перечень подкаталогов, содержащихся в каталоге, либо построить список файлов, содержащихся в каталоге. Акт перечисления означает, что вы просто хотите найти все каталоги и/или файлы, расположенные внутри другого каталога.