0

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

这是我拥有的一段代码。

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 );
}

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

谢谢,陶西夫。

4

2 回答 2

1

Apple 有一个代码示例演示如何执行此操作:

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 小时内被修改。

于 2012-12-08T10:07:44.647 回答
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);
    }
}
于 2012-12-09T09:14:35.133 回答