سؤال

هل هناك طريقة للحصول على سلسلة قابلة للقراءة البشرية (@"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 لرسم خريطة كل رقم إلى تمثيله الأبجدي الرقمي ....

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top