Как получить все файлы в каталоге в IPad, используя цель C - PullRequest
5 голосов
/ 12 марта 2012

Мне нужно получить все файлы в каталоге, включая все подкаталоги и все файлы в каждом подкаталоге. в цели C, я должен попытаться использовать этот метод [[NSFileManager defaultManager] contentsOfDirectoryAtPath:filePath error:nil]

но он просто дает мне массив содержимого файла в каталоге filePath, я не могу получить все файлы в подкаталоге, кто-нибудь может мне помочь ??

спасибо

Ответы [ 2 ]

8 голосов
/ 12 марта 2012
- (void)scanPath:(NSString *) sPath {

    BOOL isDir;

    [[NSFileManager defaultManager] fileExistsAtPath:sPath isDirectory:&isDir];

    if(isDir)
    {
        NSArray *contentOfDirectory=[[NSFileManager defaultManager] contentsOfDirectoryAtPath:sPath error:NULL];

        int contentcount = [contentOfDirectory count];
        int i;
        for(i=0;i<contentcount;i++)
        {
            NSString *fileName = [contentOfDirectory objectAtIndex:i];
            NSString *path = [sPath stringByAppendingFormat:@"%@%@",@"/",fileName];


            if([[NSFileManager defaultManager] isDeletableFileAtPath:path])
            {   
                NSLog(path);
                [self scanPath:path];
            }
        }

    }
    else
    {
        NSString *msg=[NSString stringWithFormat:@"%@",sPath];
        NSLog(msg);
    }
}

Вы можете вызвать эту функцию, которая будет регистрировать все файлы в каталоге, надеюсь, это поможет.

5 голосов
/ 12 марта 2012

Вы хотите использовать enumeratorAtURL: includesPropertiesForKeys: options: error: вместо этого. По умолчанию выполняется глубокое перечисление:

NSURL *myDirectoryURL = [[NSBundle mainBundle] URLForResource:@"Assets" withExtension:@""];
NSDirectoryEnumerator *directoryEnumerator = [[NSFileManager defaultManager] enumeratorAtURL:myDirectoryURL includingPropertiesForKeys:[NSArray array] options:0 errorHandler:^BOOL(NSURL *url, NSError *error) {
    // handle error
    return NO;
}];

NSString *fileOrDirectory = nil;
while ((fileOrDirectory = [directoryEnumerator nextObject])) {
    // use file or directory
}

Аргумент options позволяет вам указать глубокое или поверхностное перечисление.

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html

...