2010-05-14 3 views
6

코코아를 사용하여 Mac에서 파일/폴더에 마지막으로 액세스 한 날짜를 가져올 수 있습니까?코코아에서 파일의 마지막 액세스 날짜 찾기

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); 
내가 모두 UTF8String에와 fileSystemRepresentation을 시도 위의 코드 당으로

하지만, 모두가 나에게 현재 날짜를 제공하고 소 시간이 내가 뭔가 잘못을하고있는 중이 있으면 알려 주시기.

+1

열린 패널은 선택한 각 파일의 미리보기를 표시합니까? 그렇다면 파일을 "미리보기"하는 데 필요한'read' 호출은 액세스 시간을 업데이트하는 것입니다. 'atime'은''mknod'' 또는''utimes''가 호출되었을 때,''어떤 응용 프로그램에 의해 공식적으로 열렸던 ''마지막 시간이 아닌''read '(또는'mknod', 또는'utimes') 시간이었습니다. –

답변

10

목표 - C에서 작동 스탯 시스템 호출을 사용하여, 그 일의 C 방법.

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

경로가 포함 된 NSString에 -fileSystemRepresentation을 보내면 aFilePath를 가져야합니다.

원하는대로 할 수있는 또 다른 방법은 원하는 파일을 가리키고 -resourceValuesForKeys:error:을 사용하여 파일 값을 NSURLContentAccessDate 리소스 값으로 가져 오는 NSURL 파일 URL을 작성하는 것입니다.

+1

Jeremy 's Cocoa 방법과 관련된 단 하나의 문제는 10.6만이라는 것입니다. 10.6 이전 API에는 파일 액세스 아날로그가 없으므로 stat 메소드로 돌아 가야합니다. – Jablair

+0

@jablair : 좋은 지적입니다. 방금 문서를 확인했고 iPhone에서도 사용할 수 없습니다. – JeremyP

+0

고마워요, 코드를 위해, 제가 알려 드리겠습니다. 또한 Api 버전을 언급 해 주셔서 감사합니다. 지금은 10.5를 사용하여 개발 중이므로 stat 메소드를 사용합니다. – AmitSri

1
+0

링크를 주셔서 감사합니다,하지만 내 질문에 마지막으로 파일을 마지막으로 miRsoft windows.Right 같은 액세스 날짜를 얻는 관한 지금은 NSFileModificationDate NSFileModificationDate 및 NSFileCreationDate file.So NSFileLastAccessedDate 같은 것을 기대하고 있습니다. 가능한 경우 맥에 들어가. – AmitSri

1

NSMetadataQuery를 사용하면 코드에서 스포트라이트 메타 데이터에 액세스 할 수 있습니다. 파일의 마지막으로 사용한 날짜 속성은 스포트라이트에 의해 추적되며이 속성으로 액세스 할 수 있습니다 : kMDItemLastUsedDate.

+0

catch는 Spotlight가 켜져 있고 파일이있는 볼륨의 색인을 생성했으며 현재 파일이있는 볼륨의 색인을 다시 생성하지 않는 경우에만 작동합니다. –

+0

감사합니다. 정확합니다. 스포트라이트 기능을 신뢰할 수 없습니다. 사용 중지 된 것처럼 기능이 느슨해집니다. – AmitSri

+0

그리고 Spotlight *가 켜져 있으면 즉시 마지막 액세스 시간이 의미가 없게됩니다. 마지막 액세스 시간은 스포트라이트가 파일을 인덱싱 한 마지막 시간 일 수 있습니다. – 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; 
}