如果文件夹放置在 Dock 中,您可以按"添加日期"对其进行排序 - 这通常是"下载"文件夹的默认设置。(有时 Finder 似乎没有使用添加的日期,而是使用了修改的日期,但它可以找到添加的日期。发现者从哪里弄清楚这一点?标准文件元数据,即由stat,getattrlist或FSGetCatInfo获得的元数据)不包含它。蒂亚
是的,添加的日期可以从其他结构中推断出来。事实上,它驻留在聚光灯元数据中。
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;
}
注意:现在狮子已经出局了。
Finder不是,Dock是。它在内部跟踪此数据。如果删除文件夹并将其放回原处,则现有项目的"添加日期"信息将丢失。
以下是 Wojtek 的答案的 Swift 5.x 版本:
public extension URL {
var dateAdded: Date? {
if let metadataItemValue = MDItemCreateWithURL(kCFAllocatorDefault, (self as CFURL)) {
return MDItemCopyAttribute(metadataItemValue, kMDItemDateAdded) as? Date
}
return nil
}
}
我已经在 Swift 4.x 上测试了它,我认为如果你也需要的话,它会在不加修改的情况下编译回 Swift 3.x。请注意,在 Swift 5 之前,其推断的可见性将是internal
而不是public
。