获取文件或文件夹大小

c语言 实现


#include "sys/stat.h"

- (long long) fileSizeAtPath:(NSString*) filePath{  

    struct stat st;  
    if(lstat([filePath cStringUsingEncoding:NSUTF8StringEncoding], &st) == 0){  
        return st.st_size;  
    }  
    return 0;  
}  


objective-c 语言实现

-(long long) fileSizeAtPath:(NSString*) filePath{  

  NSFileManager* manager = [NSFileManager defaultManager];  

  if ([manager fileExistsAtPath:filePath]){  

    return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];  

  }  

  return 0;  

}  


其中C语言的性能比OC要高得多。



获取目录大小

- (long long)folderSize:(const char *)folderPath { long long folderSize = 0; DIR* dir = opendir(folderPath); if (dir == NULL) { return 0; } struct dirent* child; while ((child = readdir(dir)) != NULL) { if (child->d_type == DT_DIR && (child->d_name[0] == '.' && child->d_name[1] == 0)) { continue; } if (child->d_type == DT_DIR && (child->d_name[0] == '.' && child->d_name[1] == '.' && child->d_name[2] == 0)) { continue; } int folderPathLength = strlen(folderPath); char childPath[1024]; stpcpy(childPath, folderPath); if (folderPath[folderPathLength - 1] != '/'){ childPath[folderPathLength] = '/'; folderPathLength++; } stpcpy(childPath + folderPathLength, child->d_name); childPath[folderPathLength + child->d_namlen] = 0; if (child->d_type == DT_DIR){ folderSize += [self folderSize:childPath]; struct stat st; if (lstat(childPath, &st) == 0) { folderSize += st.st_size; } } else if (child->d_type == DT_REG || child->d_type == DT_LNK){ struct stat st; if (lstat(childPath, &st) == 0) { folderSize += st.st_size; } } } return folderSize; }

你可能感兴趣的:(c,manager,struct,null,语言)