如何在Objective C代码中查找目录的修改日期的所有内容

时间:2012-12-08 09:51:18

标签: objective-c nsfilemanager

此要求非常特定于读取目录内容以及为所有子文件和文件夹修改的日期。在Windows中我们有一些API,但我在Mac OS开发中没有找到类似的功能。我搜索了这个,我发现NSFileManager可以用于此。我找到了一个可以获取文档目录下的路径内容的地方。

这是我的代码段。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];

NSFileManager *manager = [[NSFileManager alloc] init];
NSDirectoryEnumerator *fileEnumerator = [manager enumeratorAtPath:documentsPath];

for (NSString *filename in fileEnumerator) {
    // Do something with file
    NSLog(@"file name : %@",filename );
}

但我的要求是在机器上的任何路径下找到内容,并为其中的所有子文件和文件夹修改日期。请指导我。

谢谢, Tausif。

2 个答案:

答案 0 :(得分:1)

Apple有一个code sample演示如何执行此操作:

NSDirectoryEnumerator *directoryEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:directoryPath];

NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:(-60*60*24)];

for (NSString *path in directoryEnumerator) {

    if ([[path pathExtension] isEqualToString:@"rtfd"]) {
        // Don't enumerate this directory.
        [directoryEnumerator skipDescendents];
    } else {
        NSDictionary *attributes = [directoryEnumerator fileAttributes];
        NSDate *lastModificationDate = [attributes objectForKey:NSFileModificationDate];

        if ([yesterday earlierDate:lastModificationDate] == yesterday) {
            NSLog(@"%@ was modified within the last 24 hours", path);
        }
    }
}

基本上,此代码枚举directoryPath并检查文件或目录是否在过去24小时内被修改。

答案 1 :(得分:1)

您可以使用[NSFilemanager.defaultManager subpathsAtPath:<yourpath> error:nil]。请注意,您可能不需要特殊的NSFileManager实例,因此应使用defaultManager

NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:(-60*60*24)];

NSFileManager *fm = NSFileManager.defaultManager;
NSArray *subPaths = [fm subpathsAtPath:documentsPath];

for (NSString *path in subPaths) {
    NSDictionary *attributes = [fm fileAttributesAtPath:path traverseLink:YES];
    NSDate *lastModificationDate = [attributes objectForKey:NSFileModificationDate];

    if ([yesterday earlierDate:lastModificationDate] == yesterday) {
        NSLog(@"%@ was modified within the last 24 hours", path);
    }
}