如何以编程方式获得最后一次打开"日期在Finder中显示

时间:2013-06-03 14:15:19

标签: macos cocoa core-foundation hfs+

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

NSDate* lastAccessDate = [fileUrl resourceValuesForKeys:@[NSURLContentAccessDateKey] error:NULL][NSURLContentAccessDateKey];

struct stat buf;
stat(curName, &buf);
time_t lastAccessDate = buf.st_atimespec.tv_sec;

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


我阅读了帖子'Get the real “last opened” date?''“Last Opened” Date',但这些都没有解决。他们建议像

这样的东西
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);

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

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

2 个答案:

答案 0 :(得分:0)

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

引用chown33:

  

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

     

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

     

...

     

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

答案 1 :(得分:0)

我遇到了同样的问题。我发现当Finder遇到kMDItemLastUsedDate密钥不可用的情况时,它会显示kMDItemFSContentChangeDate密钥的值。