在objective-c中使用带有八进制格式的NSLog显示对象

时间:2012-10-03 19:33:09

标签: objective-c nslog octal

我想以八进制显示文件的权限。下面的代码有效,但只显示十进制的权限。我有什么想法可以将结果转换为八进制? %o没有显示正确的结果。

NSString *path=@"/somepath";
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *contents = [fm contentsOfDirectoryAtPath:path error:NULL];
NSString* fullPath = nil;

for(NSString* node in contents) {

    fullPath = [NSString stringWithFormat:@"%@%@",path,node];
    NSDictionary *fileAttributes = [fm attributesOfItemAtPath:fullPath error:NULL];

    unsigned *posix=(unsigned *)[fileAttributes valueForKey:NSFilePosixPermissions];
    NSLog(@"Permissions:%@", posix); //shows 420 decimal. I need to show 644 octal

}

由于

1 个答案:

答案 0 :(得分:0)

您可以使用格式%o以八进制输出。但是,fileAttributes字典包含NSNumber个对象,因此您需要执行以下操作才能使用它:

NSNumber *posixPermissions = [fileAttributes valueForKey:NSFilePosixPermissions];
NSLog(@"Permissions: %o", [posixPermissions shortValue]);