在iOS

时间:2016-01-18 20:50:51

标签: ios c filesystems posix foundation

我希望计算包含数百万个文件(每个约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");
}

1 个答案:

答案 0 :(得分:0)

如果您想要比CoreFoundation方法更快的内容,请直接使用opendir()readdir()stat()来枚举目录并获取文件大小。

但最终,您可能会遇到iOS设备上的存储速度限制,因此对于您正在处理的文件数量,此操作可能永远不会很快。