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

发布于 2024-11-07 07:30:49 字数 190 浏览 3 评论 0原文

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

If a folder is placed in the Dock you can sort it by "date added" - this is usually the default for the Downloads folder. (Sometimes the Finder does not appear to be using the date added but the date modified, but it can find the date added.) Where is the Finder figuring this out from? The standard file metadata, i.e. as obtained by stat, getattrlist or FSGetCatInfo) does not contain it. TIA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瘫痪情歌 2024-11-14 07:30:49

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

Yep, the date added could be inferred from other structures. In fact, it resides in Spotlight metadata.

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;
}
梦幻的味道 2024-11-14 07:30:49

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

Here's a Swift 5.x version of Wojtek's answer:

public extension URL {
    var dateAdded: Date? {
        guard let metadataItemValue = MDItemCreateWithURL(kCFAllocatorDefault, (self as CFURL)) else {
            return nil
        }
        return MDItemCopyAttribute(metadataItemValue, kMDItemDateAdded) as? Date
    }
}

I've tested this back to Swift 4.x, and I think it'll compile without modification back to Swift 3.x if you need that too. Just be aware that, before Swift 5, its inferred visibility would be internal rather than public.

那些过往 2024-11-14 07:30:49

注意:Lion 已经过时了。

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

Note: out of date now that Lion’s out.

The Finder isn’t, the Dock is. It tracks this data internally. If you remove a folder and put it back, the “date added” information is lost for existing items.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文