NSFileManager和NSFilePosixPermissions

qwe*_*rtz 6 permissions xcode nsdictionary chmod nsfilemanager

我想对NSFilePosixPermissions使用八进制权限(用于chmod).这是我现在做的:

NSFileManager *manager = [NSFileManager defaultManager];
NSDictionary *attributes;

[attributes setValue:[NSString stringWithFormat:@"%d", 0777] 
             forKey:@"NSFilePosixPermissions"]; // chmod permissions 777
[manager setAttributes:attributes ofItemAtPath:@"/Users/lucky/Desktop/script" error:nil];
Run Code Online (Sandbox Code Playgroud)

我没有得到任何错误,但是当我用"ls -o"检查结果时,权限是-rwxrwxrwx.

怎么了?感谢帮助.

gcb*_*ann 14

首先,NSFilePosixPermissions是常量的名称.它的价值也可能相同,但不保证.该值NSFilePosixPermissions恒定的可能框架的版本,例如从之间切换@"NSFilePosixPermissions"到@"posixPermisions".这会破坏你的代码.正确的方法是使用常量NSFilePosixPermissions,而不是@"NSFilePosixPermissions".

此外,NSFilePosixPermissions参考说明NSFilePosixPermisions:

对应的值是一个NSNumber对象.使用该shortValue方法检索权限的整数值.

设置POSIX权限的正确方法是:

// chmod permissions 777

// Swift
attributes[NSFilePosixPermissions] = 0o777

// Objective-C
[attributes setValue:[NSNumber numberWithShort:0777] 
             forKey:NSFilePosixPermissions];
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用文字符号来传递NSNumber(和NSDictionary):`@ {NSFilePosixPermissions:@ 0777} (2认同)