我希望计算包含数百万个文件(每个约1K)的文件夹的大小,而NSFileManager
/ NSDirectoryEnumerator
只是没有削减它。
我想到了在Unix级别而不是基金会这样做。我理解不鼓励/禁用fork()
,首选方法是调用posix_spawn
并将/ pipe输出重定向到C字符串缓冲区。怎么办呢?
不鼓励实施:
FILE *fp;
int status;
char output[PATH_MAX];
NSString *cmd = [NSString stringWithFormat:@"du -sk %@", folderPath];
fp = popen([cmd UTF8String], "r");
if (fp == NULL) {
NSLog(@"could not get file pointer");
return 0;
}
while (fgets(output, PATH_MAX, fp) != NULL) {
NSLog(@"size and path: %s", output);
}
status = pclose(fp);
if (status == -1) {
NSLog(@"could not close file pointer");
} else {
NSLog(@"closed file pointer");
}
答案 0 :(得分:0)
如果您想要比CoreFoundation方法更快的内容,请直接使用opendir()
,readdir()
和stat()
来枚举目录并获取文件大小。
但最终,您可能会遇到iOS设备上的存储速度限制,因此对于您正在处理的文件数量,此操作可能永远不会很快。