Как изменить разрешение каталога рекурсивно, используя NSFileManager setAttributes - PullRequest
5 голосов
/ 29 марта 2010

В настоящее время я использую NSFileManager setAttributes, чтобы изменить разрешение каталога. Моя проблема в том, что это, кажется, не делает это рекурсивно. Есть ли способ заставить это сделать?

Ответы [ 2 ]

4 голосов
/ 29 марта 2010

Я не думаю, что есть встроенный метод, чтобы сделать это, но это не должно быть трудно сделать что-то вроде:

NSString *path = @"/The/root/directory";
NSDictionary *attributes;   // Assume that this is already setup


NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *subPaths = [fileManager subpathsAtPath:path];
for (NSString *aPath in subPaths) {
    BOOL isDirectory;
    [fileManager fileExistsAtPath:aPath isDirectory:&isDirectory];
    if (isDirectory) {
        // Change the permissions on the directory here
        NSError *error = nil;
        [fileManager setAttributes:attributes ofItemAtPath:aPath error:&error];
        if (error) {
            // Handle the error
        }
    }
}

Это не проверено, но должно дать вам отправную точку.

2 голосов
/ 27 мая 2010
NSString *path = @"/User/user/aPath";
NSFileManager *manager = [[[NSFileManager alloc] init] autorelease];
if ([manager fileExistsAtPath: path]) {
  NSDictionary *attrib = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithInt:0], NSFileGroupOwnerAccountID,
                             [NSNumber numberWithInt:0], NSFileOwnerAccountID,
                             @"root", NSFileGroupOwnerAccountName,
                             @"root", NSFileOwnerAccountName, nil ];
  NSError *error = nil;
  [manager setAttributes:attrib ofItemAtPath:path error:&error];
  NSDirectoryEnumerator *dirEnum = [manager enumeratorAtPath: path];
  NSString *file;
  while (file = [dirEnum nextObject]) {
    [manager setAttributes:attrib ofItemAtPath:[path stringByAppendingPathComponent:file] error:&error];
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...