如何以编程方式获取Finder中显示的"上次打开"日期

cod*_*nd1 5 macos cocoa core-foundation hfs+

我想在我的应用程序中显示"上次打开"日期,就像在Finder预览或信息面板中一样.但是我意识到这与我最后的访问日期不一样

NSDate* lastAccessDate = [fileUrl resourceValuesForKeys:@[NSURLContentAccessDateKey] error:NULL][NSURLContentAccessDateKey];
Run Code Online (Sandbox Code Playgroud)

或者

struct stat buf;
stat(curName, &buf);
time_t lastAccessDate = buf.st_atimespec.tv_sec;
Run Code Online (Sandbox Code Playgroud)

这些返回Unix最后访问时间,它也显示在终端中ls -l 但是Finder显示一个不同的值,只有在用户打开文件时才会更改(例如通过双击)


我看了帖子"真实的"最后一次打开"日期?" "最后一次打开"日期'但这些并没有解决它.他们推荐类似的东西

MDItemRef itemRef = MDItemCreateWithURL(NULL, (__bridge CFURLRef)fileUrl);
NSArray *attributeNames = (__bridge NSArray *)MDItemCopyAttributeNames(itemRef);
NSDictionary *attributes = (__bridge NSDictionary *) MDItemCopyAttributes(itemRef, (__bridge CFArrayRef) attributeNames);
CFDateRef lastUsedCfDate = MDItemCopyAttribute(itemRef, kMDItemLastUsedDate);
NSDate* lastUsedDate = (__bridge NSDate*) lastUsedCfDate;
CFRelease(itemRef);
Run Code Online (Sandbox Code Playgroud)

attributeNames没有价值kMDItemLastUsedDate.在我的例子中,该数组中只有24个值,但最后一个没有.那lastUsedDatenil......

另外我想知道是否确实没有高级API来访问上次打开的日期.

pw2*_*222 0

http://forums.macrumors.com/showthread.php?t=855913

引用 chown33 的话:

扩展属性与元数据完全不同。Xattrs 附加到文件,作为文件系统的一部分存储。元数据从文件中提取,存储在元数据存储中(本质上是 Spotlight 的数据库)。一些 xattr 被提取并存储在元数据存储中,但它们仍然是两个独立的东西。

对元数据进行操作的命令符合“md*”通配模式:mdfind、mdls、mdutil 等。

...

您通常无法更新任何元数据值。这是设计使然,从我通过查看低级 API 可以看出。