2013-07-14 1 views
0

Как выполнить итерацию через папку (с подкаталогами, в которых могут быть дополнительные подкаталоги) и удалить файл, если это не каталог? По сути, я спрашиваю, как очистить все каталоги. У меня небольшая проблема с методом enumeratorAtPath: в этом отношении, потому что я не уверен, как спросить перечислитель, если текущий файл является каталогом или нет. Требуется просмотр словаря fileAttributes. Примечание. Это может быть очень неправильно для меня, но я инициализирую счетчик с помощью NSString пути. Это что-то меняет?Как перечислить через каталог в Objective-C и по существу очистить все каталоги файлов без каталога?

+1

Что конкретно вы возникли проблемы с? Оба метода NSDirectoryEnumerator и NSFileManager имеют методы, которые дадут вам атрибуты файлов, из которых вы можете проверить статус каталога. –

ответ

5

Что-то, как это будет работать:

NSURL *rootURL = ... // File URL of the root directory you need 
NSFileManager *fm = [NSFileManager defaultManager]; 
NSDirectoryEnumerator *dirEnumerator = [fm enumeratorAtURL:rootURL 
        includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey] 
        options:NSDirectoryEnumerationSkipsHiddenFiles 
        errorHandler:nil]; 

for (NSURL *url in dirEnumerator) { 
    NSNumber *isDirectory; 
    [url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:NULL]; 
    if (![isDirectory boolValue]) { 
     // This is a file - remove it 
     [fm removeItemAtURL:url error:NULL]; 
    } 
} 
+0

Использование 'enumeratorAtURL: ...' как это проще, чем использование 'enumeratorAtPath:', потому что 'enumeratorAtURL: ...' возвращает абсолютные URL-адреса. 'enumeratorAtPath:' возвращает относительные пути, которые вы можете передать непосредственно в 'removeItemAtPath: error:', если вы перечисляете текущий каталог. –

Смежные вопросы