الهدف-c nsfileposixpermissions إلى NSString القابلة للقراءة البشرية
-
29-09-2019 - |
سؤال
هل هناك طريقة للحصول على سلسلة قابلة للقراءة البشرية (@"DRWXR-XR-X" على سبيل المثال) من عدد صحيح NSFilePosixperMissions؟
المحلول
سمة أذونات نظام الملفات هي ببساطة قيمة طويلة غير موقعة. من الواضح أن الكود أدناه يمكن أن يكون أكثر كفاءة ولكنه يظهر [أكثر أو أقل] ما يجب القيام به للحصول على السلسلة التي تريدها:
// 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;
نصائح أخرى
حسنًا ، أعتقد أنه يمكنك إنشاء صفيف مثل ذلك:
NSArray *convertToAlpha = [NSArray arrayWithObjects:@"---",@"--x",@"-w-",@"--wx",@"r--",@"r-x",@"rw-",@"rwx", nil];
ثم بعد تفعيل NSFilePosixperMissions إلى Octal ، قم بتقسيم الرقم الناتج إلى أرقام Componenet واستخدام ConvertToalpha لرسم خريطة كل رقم إلى تمثيله الأبجدي الرقمي ....
لا تنتمي إلى StackOverflow