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 中获取文本文件的内容