2013-06-03 9 views
5

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の値がありますが、最後の値はありません。だからlastUsedDatenil ...

また、最後に開いた日付にアクセスするための高レベルのAPIがないのでしょうか。

+0

'mdls'(端末上)は' kMDItemLastUsedDate'のエントリを表示しますか?また、 'attributes'と' lastUsedCfDate'が漏れていることに注意してください。 –

+0

ああ、私は 'mdls'で少し演奏し、コピーされたが開かれていないファイルに対して' kMDItemLastUsedDate'が設定されていないことに気付きました。ただし、Finderではこれらのファイルの最後に開いた時刻も表示されます。 'kMDItemLastUsedDate'を手動で設定できますか?ファイルをコピーしてすべての属性をソースファイルの値に設定したいからです。 – codingFriend1

+0

Spotlightインポータを書かない限り、 'xattr'(コマンドラインユーティリティとAPIの両方)でできるようなSpotlight属性を設定できるかどうかはわかりません。どのようにファイルをコピーしていますか?あなたは 'copyfile(3)'を試みましたか? 'cp -p'は属性をコピーしますが、' kMDItemLastUsedDate'はコピーしません。 –

答えて

0

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

chown33を引用する:

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

MD「*」グロブパターン合うメタデータを操作するコマンド:などmdfind、のMDL、mdutil、

を...

あなたは、一般的に、メタデータのいずれかを更新するために得ることはありません値。これは、低レベルのAPIを見れば分かります。

+0

申し訳ありませんが、これは質問に答えません。 md *コマンドを使用してスポットライトメタデータを取得できることはわかっています。しかし、私はCocoaコードからこれを行う必要があります。私はコマンドラインタスクを作成せず、コンソール出力解析を行いません。 – codingFriend1

+0

@ codingFriend1、私はあなたに私の意図を投影していました。私はメタデータを修正しようとしていましたが、私が見つけたことから、その答えはメタデータシステムがそれを許さないように設計されていると思います。あなたの質問を再読した後、私はあなたがメタデータを読もうとしているのを見ています。 – pw222

0

非常に同じ問題が発生しました。 FinderがkMDItemLastUsedDateキーが利用できない場合、代わりにkMDItemFSContentChangeDateキーの値が表示されることがわかりました。