gpt4 book ai didi

xcode - 计算 cocoa 中的目录大小

转载 作者:行者123 更新时间:2023-12-03 16:15:24 24 4
gpt4 key购买 nike

我想计算目录(文件夹)大小,我必须列出卷(驱动器)中的所有文件和文件夹(子文件夹)及其相应的大小。我使用下面的代码来计算大小。这个问题代码是性能问题。我正在使用 NSBrowser 来显示 .

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] attributesOfItemAtPath:folderPath error:nil];
fileSize += [fileDictionary fileSize];
}

return fileSize;

问题:

  1. 有可用的内置函数吗?

  2. 如果不是,计算大小的最佳方法是什么?

  3. 使用缓存来存储已经计算出的文件大小是否合适?

谢谢...

最佳答案

您可以使用stat

-(unsigned long long)getFolderSize : (NSString *)folderPath;

{
char *dir = (char *)[folderPath fileSystemRepresentation];
DIR *cd;

struct dirent *dirinfo;
int lastchar;
struct stat linfo;
static unsigned long long totalSize = 0;

cd = opendir(dir);

if (!cd) {
return 0;
}

while ((dirinfo = readdir(cd)) != NULL) {
if (strcmp(dirinfo->d_name, ".") && strcmp(dirinfo->d_name, "..")) {
char *d_name;


d_name = (char*)malloc(strlen(dir)+strlen(dirinfo->d_name)+2);

if (!d_name) {
//out of memory
closedir(cd);
exit(1);
}

strcpy(d_name, dir);
lastchar = strlen(dir) - 1;
if (lastchar >= 0 && dir[lastchar] != '/')
strcat(d_name, "/");
strcat(d_name, dirinfo->d_name);

if (lstat(d_name, &linfo) == -1) {
free(d_name);
continue;
}
if (S_ISDIR(linfo.st_mode)) {
if (!S_ISLNK(linfo.st_mode))
[self getFolderSize:[NSString stringWithCString:d_name encoding:NSUTF8StringEncoding]];
free(d_name);
} else {
if (S_ISREG(linfo.st_mode)) {
totalSize+=linfo.st_size;
} else {
free(d_name);
}
}
}
}

closedir(cd);

return totalSize;

}

看看Mac OS X not reporting directory sizes correctly?

关于xcode - 计算 cocoa 中的目录大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14997676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com