フォルダで区切られたローカルドキュメントディレクトリにファイルを保存しています。iPhoneのドキュメントディレクトリとすべてのサブディレクトリのコンテンツのファイルサイズを取得する簡単な方法はありますか?
手動でフォルダーを繰り返し処理してファイルサイズを追加し続けることはできますが、よりクリーンで効率的なものがあることを望んでいます。
ありがとうございました !
フォルダで区切られたローカルドキュメントディレクトリにファイルを保存しています。iPhoneのドキュメントディレクトリとすべてのサブディレクトリのコンテンツのファイルサイズを取得する簡単な方法はありますか?
手動でフォルダーを繰り返し処理してファイルサイズを追加し続けることはできますが、よりクリーンで効率的なものがあることを望んでいます。
ありがとうございました !
アプローチと効率はiOSのバージョンによって異なります。NSFileManager
iOS 4.0以降では、次のようなカテゴリを作成できます。
- (unsigned long long)contentSizeOfDirectoryAtURL:(NSURL *)directoryURL
{
unsigned long long contentSize = 0;
NSDirectoryEnumerator *enumerator = [self enumeratorAtURL:directoryURL includingPropertiesForKeys:[NSArray arrayWithObject:NSURLFileSizeKey] options:NSDirectoryEnumerationSkipsHiddenFiles errorHandler:NULL];
NSNumber *value = nil;
for (NSURL *itemURL in enumerator) {
if ([itemURL getResourceValue:&value forKey:NSURLFileSizeKey error:NULL]) {
contentSize += value.unsignedLongLongValue;
}
}
return contentSize;
}
すべてのフォルダを再帰的に調べて、サイズを取得できます。このような:
+(NSUInteger)getDirectoryFileSize:(NSURL *)directoryUrl
{
NSUInteger result = 0;
NSArray *properties = [NSArray arrayWithObjects: NSURLLocalizedNameKey,
NSURLCreationDateKey, NSURLLocalizedTypeDescriptionKey, nil];
NSArray *array = [[NSFileManager defaultManager]
contentsOfDirectoryAtURL:directoryUrl
includingPropertiesForKeys:properties
options:(NSDirectoryEnumerationSkipsHiddenFiles)
error:nil];
for (NSURL *fileSystemItem in array) {
BOOL directory = NO;
[[NSFileManager defaultManager] fileExistsAtPath:[fileSystemItem path] isDirectory:&directory];
if (!directory) {
result += [[[[NSFileManager defaultManager] attributesOfItemAtPath:[fileSystemItem path] error:nil] objectForKey:NSFileSize] unsignedIntegerValue];
}
else {
result += [CacheManager getDirectoryFileSize:fileSystemItem];
}
}
return result;
}