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

Posted

技术标签:

【中文标题】Finder 在哪里获取文件夹中项目的“添加日期”?【英文标题】:Where does the Finder obtain the "date added" of an item in a folder? 【发布时间】:2011-05-15 07:50:08 【问题描述】:

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

【问题讨论】:

【参考方案1】:

是的,添加的日期可以从其他结构中推断出来。事实上,它位于 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】:

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

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

【讨论】:

听起来很合理的解释。但是看看 appleinsider.com/articles/11/02/27/…> - 现在这是一个谣言网站,有些人可能会说这些镜头都是假的,但它确实显示了 Lion Finder 支持按日期排序...所以也许 Apple 正在将此跟踪添加到操作系统(文件系统内部或外部)或 10.7 中的 Finder? 完全有可能,而且不难做到。但它还没有。 我希望我错过了一些东西,并且添加的日期可以从其他结构中推断出来,但没有答案。至于 Lion 可能/可能不会做什么,这是讨论这个问题的错误论坛! @JensAyton 那么如何获取所有文件夹的日期?【参考方案3】:

这是Wojtek's answer 的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

【讨论】:

以上是关于Finder 在哪里获取文件夹中项目的“添加日期”?的主要内容,如果未能解决你的问题,请参考以下文章

“系统图标”在哪里?

使用 Automator 在 finder 中获取文本文件的内容

在Finder中维护单独的文件夹各种项目文件

如何在 Mac OS X 10.5 中处理从 Finder 中的多个文件拖放?

给苹果电脑安装软件要安装在哪里?

无法使用 Cocoa 中的服务在 Finder 的上下文菜单中添加项目