Desidero visualizzare la data "Ultima apertura" nella mia app proprio come nell'anteprima del Finder o nel pannello delle informazioni. Comunque mi sono reso conto che questo non è lo stesso che l'ultima data di accesso che vorrei avere conCome ottenere la data dell'ultima apertura come visualizzata nel Finder
NSDate* lastAccessDate = [fileUrl resourceValuesForKeys:@[NSURLContentAccessDateKey] error:NULL][NSURLContentAccessDateKey];
o con
struct stat buf;
stat(curName, &buf);
time_t lastAccessDate = buf.st_atimespec.tv_sec;
Queste restituiscono l'ultimo tempo di accesso Unix che viene visualizzato anche in Terminal per ls -l
Tuttavia Finder visualizza un valore differente che cambia solo quando il file viene aperto dall'utente (ad esempio tramite un doppio clic)
Ho letto i messaggi 'Get the real “last opened” date?' e '“Last Opened” Date' ma questi non l'hanno risolto. Essi raccomandano qualcosa come
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);
Ma attributeNames
non ha un valore kMDItemLastUsedDate
. Nel mio caso ci sono esattamente 24 valori in quell'array, ma nessuno per l'ultimo utilizzo. Quindi lastUsedDate
è nil
...
Inoltre, mi chiedo se non ci sia davvero un'API di alto livello per accedere all'ultima data aperta.
'mdls' (sul terminale) mostra una voce per' kMDItemLastUsedDate'? Inoltre, nota che stai perdendo 'attributes' e' lastUsedCfDate'. –
Ah, ho giocato un po 'con 'mdls' e ho capito che' kMDItemLastUsedDate' non è impostato per i file che sono stati copiati ma non ancora aperti. Tuttavia, il Finder mostra anche l'ultima volta aperta per questi file. Posso impostare manualmente 'kMDItemLastUsedDate'? Chiedo, perché voglio copiare i file e impostare tutti gli attributi sui valori del file sorgente. – codingFriend1
Non sono sicuro che sia possibile impostare gli attributi Spotlight come è possibile con 'xattr' (sia l'utilità della riga di comando che l'API) a meno che non si scriva un importatore Spotlight. Come stai copiando il file? Hai provato 'copyfile (3)'? 'cp -p' copia alcuni attributi ma non' kMDItemLastUsedDate'. –