Finder 从哪里获取文件夹中项目的“添加日期”?

问题描述 投票:0回答:3

如果文件夹放置在 Dock 中,您可以按“添加日期”对其进行排序 - 这通常是下载文件夹的默认设置。 (有时 Finder 似乎没有使用添加的日期,而是使用修改的日期,但它可以找到添加的日期。)Finder 从哪里计算出这一点?标准文件元数据(即通过 stat、getattrlist 或 FSGetCatInfo 获取的元数据)不包含它。 TIA

objective-c cocoa macos-carbon
3个回答
13
投票

是的,添加的日期可以从其他结构中推断出来。事实上,它驻留在 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;
}

2
投票

这是 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


1
投票

注意: 现在 Lion 已经过时了。

Finder 不是,Dock 才是。它在内部跟踪这些数据。如果删除文件夹并将其放回去,现有项目的“添加日期”信息将丢失。

© www.soinside.com 2019 - 2024. All rights reserved.