使用 FileAttributeKey.posixPermissions 与使用 stat -f %A 有何不同?

How's using FileAttributeKey.posixPermissions different from using stat -f %A?

我正在尝试获取文件的 posix 权限,但是当我使用密钥 FileAttributeKey.posixPermissions(最初是 NSFilePosixPermissions)检索数字 posix权限值,它返回 511 (-r-x--x--x),但是当我在终端中使用 stat -f %A /path/to/file 时,它返回 777 (-rwxrwxrwx) 这是正确的(我使用 chmod 777 /path/to/file,所以它应该是 777 (-rwxrwxrwx)).

这是我的代码,使用 FileAttributeKey.posixPermissions (Swift 4):

var numericalValue = "000"
if let attributes = try? FileManager.default.attributesOfItem(atPath: "/path/to/file") {
    if let posixPermissions = attributes[.posixPermissions] as? NSNumber {
        numericalValue = posixPermissions.stringValue
    }
}

我不知道发生了什么,我想知道从 FileAttributeKey.posixPermissions 返回的值与 stat -f %A /path/to/filestat -x /path/to/file 的输出有何不同,任何人都可以帮我看看?

您需要以八进制显示结果:

if let attributes = try? FileManager.default.attributesOfItem(atPath: "/path/to/file") {
    if let posixPermissions = attributes[.posixPermissions] as? NSNumber {
        let octal = String(posixPermissions.intValue, radix: 8, uppercase: false)
        print(octal)
    }
}