2010-05-14 3 views
1

Я пытаюсь подсчитать целые файлы в каталоге, включая подкаталоги. Это то, что я должен рассчитывать файлы в первой папке:Количество файлов в каталогах И подкаталоги? iPhone

-(NSString *)numberOfPhotos 
{ 
    NSString *MyPath = @"/rootdirectory/"; 
    NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath:MyPath]; 

    return [NSString stringWithFormat:@"%d", [directoryContent count]]; 
} 

Я думал, может быть что-то вроде

for (file in folder){ 
    [file count] 
{ 

, но, кажется, работает оленья кожа.

UPDATE: На самом деле, было очень легко:

NSDirectoryEnumerator *subs = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:musicPath error:nil]; 

ответ

5
NSDirectoryEnumerator *subs = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:musicPath error:nil]; 
+0

Он вернет объект NSArray, а не NSDirectoryEnumerator – dark

+0

NSArray * subs = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath: musicPath error: nil]; – BhushanVU

3

Вы находитесь на правильном пути. Вам нужен рекурсивный метод. Вы проходите в каталоге, метод захватывает все файлы в каталоге, а затем проверяет каждый из них, чтобы узнать, является ли это каталогом или нет. Здесь у вас будет цикл for, чтобы проверить, является ли текущий объект каталогом. Если это каталог, он будет называть себя именем каталога. Если нет, он увеличивает счетчик на единицу и продолжается.

Невозможно опубликовать код прямо сейчас, но так вы сделали бы это.

+0

плз пост, когда вы можете! – WrightsCS

+0

Я отправил некоторый псевдокод, чтобы вы могли видеть рекурсивный алгоритм в другом ответе. – progrmr

+0

+1, nitpick corner: вы не точно _need_ рекурсивный алгоритм для перемещения по дереву, но, конечно, это проще ;-) –

1

Смотрите, если я могу писать код с помощью IPad клавиатуры ... С помощью псевдокода, чтобы описать рекурсивный алгоритм:

int fileCount(directory) 
{ 
    int count = 0; 
    for (file in directory) 
    { 
     if (isDirectory(file)) 
      count += fileCount(file); 
     else 
      count++; 
    } 
    return count; 
}     
Смежные вопросы