我想访问目录的实际大小,以及目录中的可用空间。我已经使用了 [NSFileManager defaultManager]attributesOfItemAtPath:path error:&error] 方法。此方法适用于文件,但对于目录,它不提供实际值。请帮助解决这个问题。提前致谢。
问问题
2105 次
3 回答
3
您可以使用 Carbon 而不是 NSEnumerator 使用这种特定方法最快地计算目录的大小: 这里
要计算可用空间,您可以使用该方法。确保输入卷的完整路径:
NSDictionary* fileAttributes = [[NSFileManager defaultManager] fileSystemAttributesAtPath:folder];
unsigned long long size = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];
尺寸是您要寻找的。
于 2013-07-01T11:00:36.137 回答
2
通过 swift 您可以使用此功能获得可用空间
func getFreeSpace() -> CGFloat {
do {
let fileAttributes = try NSFileManager.defaultManager().attributesOfFileSystemForPath("/")
if let size = fileAttributes[NSFileSystemFreeSize] as? CGFloat {
return size
}
} catch { }
return 0
}
于 2016-04-15T18:32:07.727 回答
0
#include <sys/stat.h>
#include <dirent.h>
-(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;
}
您也可以使用du
命令。
du -- 显示磁盘使用情况统计
于 2013-07-01T12:37:01.530 回答