Skip to content

Instantly share code, notes, and snippets.

@CodaFi
Last active December 20, 2015 02:49
Show Gist options
  • Save CodaFi/6059198 to your computer and use it in GitHub Desktop.
Save CodaFi/6059198 to your computer and use it in GitHub Desktop.
uint64_t CFISizeOfFilesAtPaths(NSArray *inArray) {
uint64_t accumulator = 0;
NSString *fileString = nil;
for (id file in inArray) {
if ([file isKindOfClass:NSString.class]) {
fileString = file;
} else if ([file isKindOfClass:NSURL.class]) {
fileString = [file path];
}
NSDictionary *fileAttributes = [NSFileManager.defaultManager attributesOfItemAtPath:fileString error:nil];
BOOL fileIsDirectory = [fileAttributes.fileType isEqualToString:NSFileTypeDirectory];
BOOL fileIsSymbolicLink = [fileAttributes.fileType isEqualToString:NSFileTypeSymbolicLink];
if (fileIsDirectory) {
NSMutableArray *allFiles = @[].mutableCopy;
for (NSString *directoryFile in [NSFileManager.defaultManager contentsOfDirectoryAtPath:fileString error:nil]) {
[allFiles addObject:[fileString stringByAppendingPathComponent:directoryFile]];
}
accumulator += CFISizeOfFilesAtPaths(allFiles);
} else if (fileIsSymbolicLink) {
NSString *traversedPath = [NSFileManager.defaultManager destinationOfSymbolicLinkAtPath:fileString error:nil];
NSDictionary *traversedFileAttributes = [NSFileManager.defaultManager attributesOfItemAtPath:traversedPath error:nil];
accumulator += traversedFileAttributes.fileSize;
} else {
accumulator += fileAttributes.fileSize;
}
}
return accumulator;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment