在Cocoa中查找文件的上次访问日期

时间:2010-05-14 09:35:14

标签: objective-c cocoa

是否可以使用cocoa在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,但两者都给了我当前的日期和时间。如果我做错了,请告诉我。

5 个答案:

答案 0 :(得分:11)

使用stat系统调用的C方式将在Objective-C中起作用。

e.g。

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

您应该通过将-fileSystemRepresentation发送到包含路径的NSString来获取aFilePath。

另一种获得所需内容的方法是在指向所需文件的文件URL之前构建NSURL,并使用-resourceValuesForKeys:error:获取NSURLContentAccessDate资源值。

答案 1 :(得分:1)

答案 2 :(得分:1)

使用NSMetadataQuery,您可以从代码中访问Spotlight元数据。聚光灯跟踪文件的最后使用日期属性,您可以使用此属性访问该属性:kMDItemLastUsedDate。

答案 3 :(得分: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;
}

答案 4 :(得分:0)

NSURL / URL的资源值可以提供以下信息:

let url: URL = ...
let values = try url.resourceValues(forKeys: [.contentAccessDateKey])
let accessed: Date? = values.contentAccessDate