Finderのプレビューまたは情報パネルと同様に、「最後に開いた」日付をアプリケーションに表示します。しかし、私はこれは私が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
私は投稿'Get the real “last opened” date?'と'“Last Opened” Date'を読んだが、これで解決しなかった。彼らは値kMDItemLastUsedDate
を持っていない
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
のようなものをお勧めします。私の場合、その配列には正確に24の値がありますが、最後の値はありません。だからlastUsedDate
はnil
...
また、最後に開いた日付にアクセスするための高レベルのAPIがないのでしょうか。
'mdls'(端末上)は' kMDItemLastUsedDate'のエントリを表示しますか?また、 'attributes'と' lastUsedCfDate'が漏れていることに注意してください。 –
ああ、私は 'mdls'で少し演奏し、コピーされたが開かれていないファイルに対して' kMDItemLastUsedDate'が設定されていないことに気付きました。ただし、Finderではこれらのファイルの最後に開いた時刻も表示されます。 'kMDItemLastUsedDate'を手動で設定できますか?ファイルをコピーしてすべての属性をソースファイルの値に設定したいからです。 – codingFriend1
Spotlightインポータを書かない限り、 'xattr'(コマンドラインユーティリティとAPIの両方)でできるようなSpotlight属性を設定できるかどうかはわかりません。どのようにファイルをコピーしていますか?あなたは 'copyfile(3)'を試みましたか? 'cp -p'は属性をコピーしますが、' kMDItemLastUsedDate'はコピーしません。 –