target-c NSFilePosixPermissions для читаемого человеком NSString - PullRequest
6 голосов
/ 08 ноября 2010

есть ли способ получить читаемую человеком строку (например, @ "drwxr-xr-x") из целого числа NSFilePosixPermissions?

Ответы [ 2 ]

5 голосов
/ 08 ноября 2010

Атрибут разрешений файловой системы - это просто длинное значение без знака. Код ниже, очевидно, можно сделать более эффективным, но он показывает [более или менее], что нужно сделать, чтобы получить желаемую строку:

// The indices of the items in the permsArray correspond to the POSIX
// permissions. Essentially each bit of the POSIX permissions represents
// a read, write, or execute bit.
NSArray *permsArray = [NSArray arrayWithObjects:@"---", @"--x", @"-w-", @"-wx", @"r--", @"r-x", @"rw-", @"rwx", nil];
NSFileManager *fm = [[[NSFileManager alloc] init] autorelease];
NSMutableString *result = [NSMutableString string];
NSDictionary *attrs = [fm attributesOfItemAtPath:@"some/path.txt" error:NULL];

if (!attrs)
    return nil;

NSUInteger perms = [attrs filePosixPermissions];

if ([[attrs fileType] isEqualToString:NSFileTypeDirectory])
    [result appendString:@"d"];
else
    [result appendString:@"-"];

// loop through POSIX permissions, starting at user, then group, then other.
for (int i = 2; i >= 0; i--)
{
    // this creates an index from 0 to 7
    unsigned long thisPart = (perms >> (i * 3)) & 0x7;

    // we look up this index in our permissions array and append it.
    [result appendString:[permsArray objectAtIndex:thisPart]];
}

return result;
0 голосов
/ 08 ноября 2010

Ну, я думаю, вы можете создать массив следующим образом:

NSArray *convertToAlpha = [NSArray arrayWithObjects:@"---",@"--x",@"-w-",@"--wx",@"r--",@"r-x",@"rw-",@"rwx", nil];

Затем, после перевода NSFilePosixPermissions в восьмеричное, разделите полученное число на его цифры в компонентах и ​​используйте convertToAlpha, чтобы сопоставить каждую цифру с ее буквенно-цифровым представлением.....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...