提问人:CRD 提问时间:5/15/2011 更新时间:11/17/2023 访问量:1542
Finder 从哪里获取文件夹中项目的“添加日期”?
Where does the Finder obtain the "date added" of an item in a folder?
问:
如果文件夹放置在 Dock 中,您可以按“添加日期”对其进行排序 - 这通常是“下载”文件夹的默认设置。(有时,Finder 似乎没有使用添加的日期,而是使用修改的日期,但它可以找到添加的日期。Finder从哪里弄清楚这一点?标准文件元数据,即通过 stat、getattrlist 或 FSGetCatInfo 获取的元数据)不包含它。TIA系列
答:
1赞
Jens Ayton
5/15/2011
#1
注意:现在已经过时了,因为狮子已经出来了。
Finder 不是,Dock 是。它在内部跟踪此数据。如果删除文件夹并将其放回原处,则现有项目的“添加日期”信息将丢失。
评论
0赞
CRD
5/16/2011
听起来很合理。但看看<appleinsider.com/articles/11/02/27/......> - 现在这是一个谣言网站,有些人可能会说这些照片都是假的,但它确实显示了 Lion Finder 支持按添加日期排序......因此,也许 Apple 正在将此跟踪添加到操作系统(文件系统内或文件系统外)或 10.7 中的 Finder?
0赞
Jens Ayton
5/16/2011
完全有可能,而且这并不难做到。但它还没有到那一步。
0赞
CRD
5/17/2011
我希望我错过了一些东西,添加的日期可以从其他结构中推断出来,但没有答案。至于 Lion 可能/可能不会做什么,这是一个错误的论坛来讨论这个问题!
0赞
swapnil patel
8/23/2018
@JensAyton 那么如何获取所有文件夹的日期呢?
13赞
Wojtek
8/4/2011
#2
是的,添加的日期可以从其他结构中推断出来。事实上,它驻留在 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赞
Ky -
8/4/2019
#3
以下是 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 之前,其推断的可见性将是内部
的,而不是公开
的。
评论