objective-c NSFilePosixPermissions to human readable NSString
Есть ли способ получить читаемую человеком строку (@"drwxr-xr-x", например) из целого числа NSFilePosixPermissions ?
2 ответа:
Атрибут разрешений файловой системы-это просто длинное значение без знака. Приведенный ниже код, очевидно, можно было бы сделать более эффективным, но он показывает [более или менее], что нужно сделать, чтобы получить нужную строку:
// 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;
Ну, я думаю, вы можете создать массив так:
Затем, после перевода NSFilePosixPermissions в восьмеричное, разбейте полученное число на его составные цифры и используйте convertToAlpha для сопоставления каждой цифры с ее буквенно-цифровым представлением....NSArray *convertToAlpha = [NSArray arrayWithObjects:@"---",@"--x",@"-w-",@"--wx",@"r--",@"r-x",@"rw-",@"rwx", nil];