Не уверен, поможет ли это кому-нибудь, но я хотел бы рассказать о некоторых из моих выводов (некоторые вдохновлены комментарием @ zneak выше).
Мне не удалось найти ярлыки, использующие NSDirectoryEnumerator
, чтобы избежать перечисления по файлам для получения общего размера каталога.
Для моих тестов использование -[NSFileManager subpathsOfDirectoryAtPath:path error:nil]
было быстрее, чем использование -[NSFileManager enumeratorAtPath:path]
. Мне кажется, что это может быть классический компромисс между временем и пространством, поскольку subPaths...
создает NSArray, для которого он затем выполняет итерацию, где enumerator...
может и не быть.
Немного предыстории # 1. Предполагая, что:
NSFileManager *fileMan = [NSFileManager defaultManager];
NSString *dirPath = @"/"; // references some directory
Тогда
[fileMan enumeratorAtPath:dirPath] fileAttributes]
возвращает nil
. Правильный атрибут доступа - directoryAttributes
, но
[fileMan enumeratorAtPath:dirPath] directoryAttributes] fileSize]
возвращает размер информации каталога, а не рекурсивную сумму размеров всех содержащихся в ней файлов (а-ля I в Finder).