objective-c NSFilePosix对人类可读NSString的权限

objective-c NSFilePosix对人类可读NSString的权限,objective-c,permissions,nsstring,posix,human-readable,Objective C,Permissions,Nsstring,Posix,Human Readable,有没有办法从NSFilePosixPermissions整数中获取人类可读的字符串(@“drwxr-xr-x”为例?我想您可以创建如下数组: NSArray *convertToAlpha = [NSArray arrayWithObjects:@"---",@"--x",@"-w-",@"--wx",@"r--",@"r-x",@"rw-",@"rwx", nil]; 然后,在将NSFilePosixPermissions转换为八进制后,将生成的数字拆分为其组成部分的数字,并使用conver

有没有办法从NSFilePosixPermissions整数中获取人类可读的字符串(@“drwxr-xr-x”为例?

我想您可以创建如下数组:

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

然后,在将NSFilePosixPermissions转换为八进制后,将生成的数字拆分为其组成部分的数字,并使用convertToAlpha将每个数字映射到其字母数字表示形式….

文件系统权限属性只是一个无符号长值。下面的代码显然可以提高效率,但它[或多或少地]显示了获得所需字符串需要做什么:

// 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;

不。没有独角兽护身符和大量的酒是完全不可能的。(见按位运算:)(因为这是一个好问题,我是一个聪明的a**,所以我把这个问题投了赞成票。):-)谢谢约书亚!公认的答案似乎很好!xm。。。我试试看。如果我成功了,我会回来发布整个解决方案。谢谢大家!@VassilisGr,@ennuikiller:不过要小心,每个字符串后面都需要一个
@
符号,还需要在参数列表中添加
nil