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个值,但最后一个没有.那lastUsedDate是nil......
另外我想知道是否确实没有高级API来访问上次打开的日期.
http://forums.macrumors.com/showthread.php?t=855913
引用 chown33 的话:
扩展属性与元数据完全不同。Xattrs 附加到文件,作为文件系统的一部分存储。元数据从文件中提取,存储在元数据存储中(本质上是 Spotlight 的数据库)。一些 xattr 被提取并存储在元数据存储中,但它们仍然是两个独立的东西。
对元数据进行操作的命令符合“md*”通配模式:mdfind、mdls、mdutil 等。
...
您通常无法更新任何元数据值。这是设计使然,从我通过查看低级 API 可以看出。
| 归档时间: |
|
| 查看次数: |
1750 次 |
| 最近记录: |