使用swift在OS X上获取所有可用的文件夹元数据

时间:2016-02-11 21:36:58

标签: swift macos filesystems metadata spotlight

我正在编写一个swift程序,我想使用swift列出给定文件夹的所有元数据。据我了解,我需要NSMetadataItemreference doc of NSMetadataItem对我来说不是很清楚,所以我不能在这里编写代码示例。如何列出文件夹的所有元数据?

2 个答案:

答案 0 :(得分:2)

使用文件夹的NSURL初始化NSMetadataItem的新实例:

let item = NSMetadataItem(URL: folderURL)

然后安全地打开值:

if let item = item,
        attributes = item.valuesForAttributes(item.attributes) {
    print(attributes)
}

此处attributes是文件夹元数据属性的[String : AnyObject]字典,例如:

  

[“_ kTimeMachineIsCreationMarker”:1,“kMDItemFSCreationDate”:2015-03-09 11:49:57 +0000,“_ kTimeMachineOldestSnapshot”:2016-01-29 14:50:21 +0000,“kMDItemFSNodeCount”:4, “kMDItemFSTypeCode”:0,“kMDItemFSLabel”:0,“kMDItemFSContentChangeDate”:2015-05-05 15:24:42 +0000,“kMDItemFSOwnerGroupID”:20,“kMDItemFSFinderFlags”:0,“kMDItemFSName”:共享的游乐场数据,“ kMDItemContentCreationDate“:2015-03-09 11:49:57 +0000,”kMDItemKind“:档案,”kMDItemFSIsExtensionHidden“:0,”_ kTimeMachineNewestSnapshot“:4001-01-01 00:00:00 +0000,”kMDItemFSOwnerUserID“:501 ,“kMDItemFSInvisible”:0,“kMDItemContentTypeTree”:< __ NSArrayI 0x7f9fdbc05b70>(   public.folder,   public.directory,   public.item   )   ,“kMDItemContentModificationDate”:2015-05-05 15:24:42 +0000,“kMDItemContentType”:public.folder,“kMDItemDateAdded”:2015-03-09 11:49:57 +0000,“kMDItemDisplayName”:共享的游乐场数据,“kMDItemFSCreatorCode”:0]

答案 1 :(得分:1)

您可以扩展NSURL以从您的网址获取所有元数据,如下所示:

extension NSURL {
    var metadataItemAttributes: [String]? {
        return  NSMetadataItem(URL: self)?.attributes
    }
    var creationDateValue: NSDate? {
        return  NSMetadataItem(URL: self)?.valueForAttribute(NSMetadataItemFSCreationDateKey) as? NSDate
    }
    var modifiedDateValue: NSDate? {
        return  NSMetadataItem(URL: self)?.valueForAttribute(NSMetadataItemFSContentChangeDateKey) as? NSDate
    }
    var nameValue: String? {
        return  NSMetadataItem(URL: self)?.valueForAttribute(NSMetadataItemFSNameKey) as? String
    }
    var displayNameValue: String? {
        return  NSMetadataItem(URL: self)?.valueForAttribute(NSMetadataItemDisplayNameKey) as? String
    }
    var fileSizeValue: Int? {
        return  (NSMetadataItem(URL: self)?.valueForAttribute(NSMetadataItemFSSizeKey) as? NSNumber)?.integerValue
    }
}

测试:

let desktopURL = NSFileManager.defaultManager().URLsForDirectory(.DesktopDirectory, inDomains: .UserDomainMask).first!

print(desktopURL.creationDateValue)