1

我想访问目录的实际大小,以及目录中的可用空间。我已经使用了 [NSFileManager defaultManager]attributesOfItemAtPath:path error:&error] 方法。此方法适用于文件,但对于目录,它不提供实际值。请帮助解决这个问题。提前致谢。

4

3 回答 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 回答