您的位置:首页 > 其它

获取文件或文件夹大小

2012-10-23 17:55 344 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct 语言 manager null c