ios - Cocoa Swift,在文件和目录上获取/设置隐藏(可见/不可见)标志

标签 ios swift macos cocoa

我想测试文件系统上的文件或目录是否有特定标志,在本例中为“隐藏”标志,然后设置或删除它。我知道这可以通过命令行实现,但我想知道我是否可以使用 Cocoa/Swift 做到这一点?

我尝试使用 NSFileManager attributesOfItemAtPath,但返回的对象不包含标志。

例子:

let fm = NSFileManager.defaultManager()

do {
    let testLibrary = try fm.attributesOfItemAtPath(dataPath)
    print (testLibrary)
} catch let error as NSError {
    print("JSON Error: \(error.localizedDescription)")
}

返回:

["NSFileCreationDate": 2013-08-16 21:37:57 +0000,
 "NSFileGroupOwnerAccountName": staff, 
 "NSFileType": NSFileTypeDirectory, 
 "NSFileSystemNumber": 16777220, 
 "NSFileOwnerAccountName": xjx, 
 "NSFileReferenceCount": 61, 
 "NSFileModificationDate": 2015-10-22 07:25:12 +0000, 
 "NSFileExtensionHidden": 0, 
 "NSFileSize": 2074,
 "NSFileGroupOwnerAccountID": 20, 
 "NSFileOwnerAccountID": 501, 
 "NSFilePosixPermissions": 448, 
 "NSFileSystemFileNumber": 603923]

为了比较,当我在我的主目录中执行 ls -lO 时,我看到以下内容(注意“库”上的隐藏标志):

drwx------+ 49 xjx  staff  -        1666 Jan 11 19:43 Downloads
drwx------@ 28 xjx  staff  -         952 Jan 11 08:40 Dropbox
drwx------@ 61 xjx  staff  hidden   2074 Oct 22 09:25 Library
drwx------+  7 xjx  staff  -         238 Apr 30  2015 Movies
drwx------+  5 xjx  staff  -         170 Jun 14  2015 Music

最佳答案

Xcode11 • Swift 5Xcode 9 • Swift 4Xcode 8 • Swift 3

extension URL {
    /// `true` is hidden (invisible) or `false` is not hidden (visible)
    var isHidden: Bool {
        get {
            return (try? resourceValues(forKeys: [.isHiddenKey]))?.isHidden == true
        }
        set {
            var resourceValues = URLResourceValues()
            resourceValues.isHidden = newValue
            do {
                try setResourceValues(resourceValues)
            } catch {
                print("isHidden error:", error)
            }
        }
    }
}

关于ios - Cocoa Swift,在文件和目录上获取/设置隐藏(可见/不可见)标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34741823/

相关文章:

ios - Segue 动画/故障和延长滑动手势长度上的黑屏

macos - OSX BLE 广告数据格式

objective-c - 如何在 Cocoa 应用程序中将 NSView 添加到 NSWindow?

ios - 警告 : Application delegate received call to -application:performFetchWithCompletionHandler: but the completion handler was never called

iphone - 框架代码将消息发送到已释放的 UITableViewController 对象的错误

ios - 使用带有自定义键的 KVO

ios - Swift - 使用闭包在 init 方法中设置属性

ios - 如何应用复杂的 CALayer 变换更改?

ios - UICollectionView 在顶部加载项目 - 加载更多选项

Swift OSX - 通过拖放重新排列 NSCollectionView 不起作用