7

Finder のプレビューや情報パネルと同じように、アプリに「最後に開いた」日付を表示したいと考えています。ただし、これは取得する最終アクセス日と同じではないことに気付きました

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

または

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

これらは Unix の最終アクセス時刻を返します。これは Terminal にも表示され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);

しかしattributeNames、値はありませんkMDItemLastUsedDate。私の場合、その配列には正確に 24 個の値がありますが、最後に使用する値はありません。そうlastUsedDateですnil...

また、最後に開いた日付にアクセスするための高レベル API が本当にないのではないかと思います。

4

2 に答える 2

0

私はまったく同じ問題に遭遇しました。キーが使用できない場合に Finder が遭遇すると、代わりkMDItemLastUsedDateにキーの値が表示されることがわかりました。kMDItemFSContentChangeDate

于 2016-04-22T10:46:35.933 に答える
0

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

chown33 を引用するには:

拡張属性は、メタデータとはまったく異なります。Xattrs はファイルに添付され、ファイル システムの一部として保存されます。メタデータはファイルから抽出され、メタデータ ストア (基本的には Spotlight のデータベース) に保存されます。一部の xattrs は抽出され、メタデータ ストアに格納されますが、これらは依然として 2 つの別個のものです。

メタデータを操作するコマンドは、「md*」グロビング パターンに適合します: mdfind、mdls、mdutil など。

...

通常、メタデータ値を更新することはありません。これは、低レベルの API を見るとわかるように、設計によるものです。

于 2014-05-12T16:07:33.697 に答える