如果文件夹放置在 Dock 中,您可以按“添加日期”对其进行排序 - 这通常是下载文件夹的默认设置。 (有时 Finder 似乎没有使用添加的日期,而是使用修改的日期,但它可以找到添加的日期。)Finder 从哪里计算出这一点?标准文件元数据(即通过 stat、getattrlist 或 FSGetCatInfo 获取的元数据)不包含它。 TIA
是的,添加的日期可以从其他结构中推断出来。事实上,它驻留在 Spotlight 元数据中。
NSDate *dateAdded(NSURL *url)
{
NSDate *rslt = nil;
MDItemRef inspectedRef = nil;
inspectedRef = MDItemCreateWithURL(kCFAllocatorDefault, (CFURLRef)url);
if (inspectedRef){
CFTypeRef cfRslt = MDItemCopyAttribute(inspectedRef, (CFStringRef)@"kMDItemDateAdded");
if (cfRslt) {
rslt = (NSDate *)cfRslt;
}
}
return rslt;
}
这是 Wojtek 的答案的 Swift 5.x 版本:
public extension URL {
var dateAdded: Date? {
guard let metadataItemValue = MDItemCreateWithURL(kCFAllocatorDefault, (self as CFURL)) else {
return nil
}
return MDItemCopyAttribute(metadataItemValue, kMDItemDateAdded) as? Date
}
}
我已经将其测试回 Swift 4.x,并且我认为如果您也需要的话,它将无需修改即可编译回 Swift 3.x。请注意,在 Swift 5 之前,其推断的可见性将是
internal
而不是 public
。
注意: 现在 Lion 已经过时了。
Finder 不是,Dock 才是。它在内部跟踪这些数据。如果删除文件夹并将其放回去,现有项目的“添加日期”信息将丢失。