【问题标题】:Objective-C: Enable/Disable File Reading (chmod a-r)Objective-C:启用/禁用文件读取(chmod a-r)
【发布时间】:2012-06-13 19:17:02
【问题描述】:

使用 Objective-C,我如何授予/获取所有用户读取文件的权限?

我需要与chmod a-rchmod a+r 具有相同效果的东西。

谢谢!

【问题讨论】:

    标签: objective-c file-permissions chmod


    【解决方案1】:

    您是否也熟悉chmod 755 file 更改权限的方法?使用八进制数?

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
    
    //Prefixing zero is octal.
    int readPermission = 04;
    int writePermission = 02;
    int executePermission = 01;
    
    //End multiplication is to shift digits left.
    int owner = (readPermission | writePermission | executePermission) * (8 * 8);   //7
    int group = (readPermission)                                       * (8);       //4 
    int other = (executePermission);                                                //1
    
    int permissions = owner + group + other;  //0741
    
    [dict setObject:[NSNumber numberWithInt:permissions] forKey:NSFilePosixPermissions]; 
    
    NSError *error = nil;
    [[NSFileManager defaultManager] setAttributes:dict ofItemAtPath:[file path] error:&error];
    

    【讨论】:

    • 如果任何人都不清楚,这会将权限设置为 777 — 即任何人都可以做任何事情。
    • 请注意我没有测试过这个,八进制的东西应该在使用前检查一下。
    • @Chuck 的评论是正确的,但由于编辑,权限现在是 741
    • readPermission & writePermission & executePermission == 0 因为它是 AND-ing 并且没有一个位是共同的。无论如何,不​​要使用本地常量和数学计算权限掩码。使用#include <sys/stat.h>,然后使用S_IRWXU | S_IRGRP | S_IXOTH
    • @JamesWebster:另外,如果你想左移,为什么不使用左移运算符而不是使用乘法,然后添加解释它的注释?
    【解决方案2】:

    在目标 C 中做到这一点:

    NSFileManager *fm = [NSFileManager defaultManager];
    NSError *error = nil;
    NSDict *attribs = [fm attributesOfItemAtPath:[file path] error:&error];
    int permissions = [[attribs objectForKey:@"NSFilePosixPermissions"] intValue];
    permissions |= (S_IRSUR | S_IRGRP | S_IROTH);
    NSDict *newattribs = [NSDict dictionaryWithObject:[NSNumber numberWithInt:permissions]
                                               forKey:NSFilePosixPermissions];
    [fm setAttributes:dict ofItemAtPath:[file path] error:&error];
    

    或者,只需获取一个 POSIX 路径(使用 -[NSFileManager fileSystemRepresentationForPath])并在 C 中使用 chmod 函数执行此操作 - 这是 chmod 命令行工具使用的,并且可移植到任何 POSIX 平台。

    【讨论】:

      猜你喜欢
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多