2010-05-14 18 views
6

Kakao kullanarak dosya/klasör son erişilen tarihi mac olarak almak mümkün mü?Cocoa'da bir dosyanın en son erişim geçmişini bul

struct stat output; 
    //int ret = stat([[[openPanel filenames] lastObject] UTF8String], &output); 
    int ret = stat([[[openPanel filenames] lastObject] fileSystemRepresentation], &output); 
    // error handling omitted for this example 
    struct timespec accessTime = output.st_atimespec; 

    NSDate *aDate = [NSDate dateWithTimeIntervalSince1970:accessTime.tv_sec]; 

    NSLog(@"Access Time %d, %@",ret, aDate); 
i hem UTF8String ve fileSystemRepresentation denedi Yukarıdaki kod gereğince

ama ikisi de bana geçerli tarihi veriyoruz ve time.Please ben yanlış bir şey yapıyorum bana bildirin.

+1

Açık paneliniz, seçtiğiniz her dosyanın önizlemesini gösteriyor mu? Eğer öyleyse, dosyanın “önizleme” için gerekli olan “read” çağrılarının erişim zamanını güncelleştirmesi muhtemeldir. “atime”, “read” (ya da “mknod” veya “utimes”) çağrıldığında, son kez “resmen bir uygulama tarafından açılmış” değil. –

cevap

10

Objective-C çalışacak istatistik sistem çağrısıyla, bunu yapmanın C şekilde.

örn.

struct stat output; 
int ret = stat(aFilePath, &output); 
// error handling omitted for this example 
struct timespec accessTime = output.st_atime; 

Sen yolunu içeren bir NSString -fileSystemRepresentation göndererek aFilePath almalısınız.

İstediğiniz şeyi elde etmenin başka bir yolu da, istediğiniz bir dosyayı işaret eden bir dosya URL'si oluşturmak ve NSURLContentAccessDate kaynak değerini almak için -resourceValuesForKeys:error: kullanarak bir NSURL oluşturmaktır.

+1

Jeremy'nin Kakao yöntemiyle yakaladığı tek şey, sadece 10,6 olmasıdır. 10.6 öncesi API'larda dosya erişim analogu yok, bu nedenle stat yöntemine geri dönmeniz gerekiyor. – Jablair

+0

@jablair: iyi nokta. Sadece dokümanları kontrol ettim ve iPhone'da da mevcut değil. – JeremyP

+0

Teşekkürler, kod için, şunu deneyelim ve size bildireceğim. Ayrıca Api versiyonundan bahsetmeye de teşekkürler. Şu anda 10.5 kullanarak geliştiriyorum, bu yüzden stat yöntemiyle devam edecek. – AmitSri

1
+0

Bağlantı için teşekkürler, ama benim sorum sadece mirosoft windows gibi File Last Accessed Date alma ile ilgili. Şimdi sadece aşağıdaki tarihleri ​​alabilirim NSFileModificationDate ve NSFileCreationDate of file.So NSFileLastAccessedDate ... gibi bir şey bekliyorum Mac'e gir. – AmitSri

1

NSMetadataQuery'yi kullanarak, spotlight meta verilerine kodunuzdan erişebilirsiniz. Bir dosyanın en son kullanılan tarih özniteliği spot ışığıyla izlenir ve bu özelliğe erişebilirsiniz: kMDItemLastUsedDate.

+0

Yakalama, yalnızca Spot Işık açık olduğunda çalışacak, dosyanın açık olduğu dizini indeksleyecektir ve şu anda dosyanın bulunduğu birimi yeniden indekslemiyor olmasıdır. –

+0

Teşekkürler, doğru, spot ışığı özelliğine güvenemeyiz, kapatılmış gibi, işlevselliği kaybederim. – AmitSri

+0

Ve elbette, Spotlight * * açıksa, son erişim zamanını hemen anlamsız hale getirir. Son erişim süresi, dosyayı endeksli olarak son kez kolayca bulabilir. – JeremyP

0
#include <sys/stat.h> 


-(NSDate *)getFileAccessLastDateOfFile:(NSString *)aFilePath{ 
    struct stat output; 
    int ret = stat([aFilePath fileSystemRepresentation], &output); 
    struct timespec accessTime = output.st_atimespec; 
    NSDate *aDate = [NSDate dateWithTimeIntervalSince1970:accessTime.tv_sec]; 
    return aDate; 
}