Я создаю папку для кэширования изображений в Документах с моим приложением для iPhone. Я хочу смочь подавить размер этой папки к 1 МБ, таким образом, я должен для проверки размера в байты моей папки.
У меня есть код для вычисления размера файла, но мне нужен размер папки.
Каков был бы лучший способ сделать это?
Что-то вроде следующего должно помочь вам начать работу. Однако вам нужно будет изменить _documentsDirectory
на вашу конкретную папку:
- (unsigned long long int) documentsFolderSize {
NSFileManager *_manager = [NSFileManager defaultManager];
NSArray *_documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *_documentsDirectory = [_documentPaths objectAtIndex:0];
NSArray *_documentsFileList;
NSEnumerator *_documentsEnumerator;
NSString *_documentFilePath;
unsigned long long int _documentsFolderSize = 0;
_documentsFileList = [_manager subpathsAtPath:_documentsDirectory];
_documentsEnumerator = [_documentsFileList objectEnumerator];
while (_documentFilePath = [_documentsEnumerator nextObject]) {
NSDictionary *_documentFileAttributes = [_manager fileAttributesAtPath:[_documentsDirectory stringByAppendingPathComponent:_documentFilePath] traverseLink:YES];
_documentsFolderSize += [_documentFileAttributes fileSize];
}
return _documentsFolderSize;
}
Здравствуйте, Алекс, вы очень помогли, теперь написали следующую функцию, которая делает свое дело ...
- (unsigned long long int)folderSize:(NSString *)folderPath {
NSArray *filesArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:folderPath error:nil];
NSEnumerator *filesEnumerator = [filesArray objectEnumerator];
NSString *fileName;
unsigned long long int fileSize = 0;
while (fileName = [filesEnumerator nextObject]) {
NSDictionary *fileDictionary = [[NSFileManager defaultManager] fileAttributesAtPath:[folderPath stringByAppendingPathComponent:fileName] traverseLink:YES];
fileSize += [fileDictionary fileSize];
}
return fileSize;
}
Она предлагает точное количество байтов, как это делает Finder.
Кроме того, Finder возвращает два числа. Один - это размер на диске, а другой - фактическое количество байтов.
Например, когда я запускаю этот код в одной из своих папок, он возвращается в коде с 'fileSize' равным 130398. Когда я проверяю Finder, он говорит, что размер на диске составляет 201 КБ (130 398 байт).
Я немного не уверен, что использовать здесь (201 КБ или 130 398 байт) в качестве фактического размера. А пока я буду осторожен и уменьшу свой лимит вдвое, пока не выясню, что именно это означает ...
Если кто-нибудь может добавить дополнительную информацию к этим разным числам, я буду признателен.
Ура,