http://www.iliunian.com/1392.html
计算文件夹size
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | -(long)fileSizeForDir:(NSString*)path//计算文件夹下文件的总大小 { NSFileManager *fileManager = [[NSFileManager alloc] init];
NSArray* array = [fileManager contentsOfDirectoryAtPath:path error:nil]; for(int i = 0; i<[array count]; i++) { NSString *fullPath = [path stringByAppendingPathComponent:[array objectAtIndex:i]];
BOOL isDir; if ( !([fileManager fileExistsAtPath:fullPath isDirectory:&isDir] && isDir) ) { NSDictionary *fileAttributeDic=[fileManager attributesOfItemAtPath:fullPatherror:nil]; size+= fileAttributeDic.fileSize; } else { [self fileSizeForDir:fullPath]; } } [fileManager release]; return size;
} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | 1. NSFileManager 文件操作
常见的NSFileManager文件的方法: -(BOOL)contentsAtPath:path 从文件中读取数据 -(BOOL)createFileAtPath:path contents:(BOOL)data attributes:attr 向一个文件写入数据 -(BOOL)removeFileAtPath: path handler: handler 删除一个文件 -(BOOL)movePath: from toPath: to handler: handler 重命名或移动一个文件(to可能已经存在) -(BOOL)copyPath:from toPath:to handler: handler 复制文件 (to不能存在) -(BOOL)contentsEqualAtPath:path1 andPath:path2 比较两个文件的内容 -(BOOL)fileExistsAtPath:path 测试文件是否存在 -(BOOL)isReadablefileAtPath:path 测试文件是否存在,且是否能执行读操作 -(BOOL)isWritablefileAtPath:path 测试文件是否存在,且是否能执行写操作 -(NSDictionary *)fileAttributesAtPath:path traverseLink:(BOOL)flag 获取文件的属性 -(BOOL)changeFileAttributes:attr atPath:path 更改文件的属性
NSFileManager对象的创建 : NSFileManager *fm; fm = [NSFileManager defaultManager]; NSDictionary *attr =[fm fileAttributesAtPath: fname traverseLink: NO] ; //文件属性 NSLog(@"file size is:%i bytes ",[[attr objectForKey:NSFileSize] intValue]); NSData *data =[fm contentsAtPath:@"filename"];//文件内容
常见的NSFileManager目录的方法: -(NSString *)currentDirectoryPath 获取当前目录 -(BOOL)changeCurrentDirectoryPath:path 更改当前目录 -(BOOL)copyPath:from toPath:to handler:handler 复制目录结构,to不能已经存在 -(BOOL)createDirectoryAtPath:path attributes:attr 创建目录 -(BOOL)fileExistsAtPath:path isDirectory:(BOOL *)flag 测试文件是否为目录 (flag存储结构yes/no) -(NSArray *)contentsOfDirectoryAtPath:path 列出目录的内容 -(NSDirectoryEnumerator *)enumeratorAtPath:path 枚举目录的内容 -(BOOL)removeFileAtPath:path handler:handler 删除空目录 -(BOOL)movePath:from toPath:to handler:handler 重命名或移动一个目录,to不能是已经存在的
path= [fm currentDirectoryPath] ; NSArray *dirarray; NSDirectoryEnumerator *direnu;
direnu = [fm enumeratorAtPath:path]; NSLog(@"contents of %@\n",path); BOOL flag; while((path = [direnu nextObject])!=nil) { NSLog(@"%@ ",path); [fm fileExistsAtPath:path isDirectory:&flag]; if(flag == YES) [direnu skipDescendents]; //跳过子目录 } path= [fm currentDirectoryPath] ; dirarray = [fm contentsOfDirectoryAtPath:path]; NSLog(@"%@ ",dirarray);
常用路径工具函数 NSString * NSUserName(); 返回当前用户的登录名 NSString * NSFullUserName(); 返回当前用户的完整用户名 NSString * NSHomeDirectory(); 返回当前用户主目录的路径 NSString * NSHomeDirectoryForUser(); 返回用户user的主目录 NSString * NSTemporaryDirectory(); 返回可用于创建临时文件的路径目录
常用路径工具方法 -(NSString *) pathWithComponents:components 根据components中元素构造有效路径 -(NSArray *)pathComponents 析构路径,获取路径的各个部分 -(NSString *)lastPathComponent 提取路径的最后一个组成部分 -(NSString *)pathExtension 路径扩展名 -(NSString *)stringByAppendingPathComponent:path 将path添加到现有路径末尾 -(NSString *)stringByAppendingPathExtension:ext 将拓展名添加的路径最后一个组成部分 -(NSString *)stringByDeletingPathComponent 删除路径的最后一个部分 -(NSString *)stringByDeletingPathExtension 删除路径的最后一个部分 的扩展名 -(NSString *)stringByExpandingTildeInPath 将路径中的代字符扩展成用户主目录(~)或指定用户主目录(~user) -(NSString *)stringByResolvingSymlinksInPath 尝试解析路径中的符号链接 -(NSString *)stringByStandardizingPath 通过尝试解析~、..、.、和符号链接来标准化路径 - 使用路径 NSPathUtilities.h tempdir = NSTemporaryDirectory(); 临时文件的目录名 path = [fm currentDirectoryPath]; [path lastPathComponent]; 从路径中提取最后一个文件名 fullpath = [path stringByAppendingPathComponent:fname];将文件名附加到路劲的末尾 extenson = [fullpath pathExtension]; 路径名的文件扩展名 homedir = NSHomeDirectory();用户的主目录 component = [homedir pathComponents]; 路径的每个部分
NSProcessInfo类:允许你设置或检索正在运行的应用程序的各种类型信息 (NSProcessInfo *)processInfo 返回当前进程的信息 -(NSArray*)arguments 以NSString对象数字的形式返回当前进程的参数 -(NSDictionary *)environment 返回变量/值对词典。描述当前的环境变量 -(int)processIdentity 返回进程标识 -(NSString *)processName 返回进程名称 -(NSString *)globallyUniqueString 每次调用该方法都会返回不同的单值字符串,可以用这个字符串生成单值临时文件名 -(NSString *)hostname 返回主机系统的名称 -(unsigned int)operatingSystem 返回表示操作系统的数字 -(NSString *)operatingSystemName 返回操作系统名称 -(NSString *)operatingSystemVersionString 返回操作系统当前版本 -(void)setProcessName:(NSString *)name 将当前进程名称设置为name 过滤数组中的文件类型 : [fileList pathsMatchingExtensions:[NSArrayarrayWithObject:@"jpg"]]; ///
2. NSFileHandle 基本文件操作 常用NSFileHandle方法 (NSFileHandle *)fileHandleForReadingAtPath:path 打开一个文件准备读取 (NSFileHandle *)fileHandleForWritingAtPath:path 打开一个文件准备写入 (NSFileHandle *)fileHandleForUpdatingAtPath:path 打开一个文件准备更新(读取和写入) -(NSData *)availableData 从设备或通道返回可用数据 -(NSData *)readDataToEndOfFile 读取其余的数据直到文件末尾(最多UINT_MAX字节) -(NSData *)readDataOfLength:(unsigned int)bytes 从文件读取指定数目bytes的内容 -(void)writeData:data 将data写入文件 -(unsigned long long) offsetInFile 获取当前文件的偏移量 -(void)seekToFileOffset:offset 设置当前文件的偏移量 -(unsigned long long) seekToEndOfFile 将当前文件的偏移量定位的文件末尾 -(void)truncateFileAtOffset:offset 将文件的长度设置为offset字节 -(void)closeFile 关闭文件
获取文件大小
Using the C FILE type: int getFileSizeFromPath(char * path) { FILE * file; int fileSizeBytes = 0; file = fopen(path,"r"); if(file>0){ fseek(file, 0, SEEK_END); fileSizeBytes = ftell(file); fseek(file, 0, SEEK_SET); fclose(file); } return fileSizeBytes; }
or in XCode use the NSFileManager:
NSFileManager * filemanager = [[NSFileManager alloc]init]; if([filemanager fileExistsAtPath:[self getCompletePath] isDirectory:&isDirectory]){
NSDictionary * attributes = [filemanager attributesOfItemAtPath:[self getCompletePath] error:nil];
// file size NSNumber *theFileSize; if (theFileSize = [attributes objectForKey:NSFileSize])
_fileSize= [theFileSize intValue]; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 在头文件声明一个定量的文件夹路径
#define kDocument_Folder [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
以下方法是获取文件夹里面的文件数
NSFileManager *fM = [NSFileManager defaultManager];
NSArray *fileList = [fM contentsOfDirectoryAtPath:kDocument_Folder error:nil];
int filescount=[fileList count];
以下是获取文件夹里面的文件信息,还做了文件夹里文件总大小的计算
const unsigned int bytes = 1024*1024 ; //字节数,如果想获取KB就1024,MB就1024*1024
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setPositiveFormat:@"##0.00"];
float size;
NSString *path;
//遍历文件夹里面的文件
for(NSString *file in fileList) {
path = [kDocument_Folder stringByAppendingPathComponent:file];
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil];
size=size+(float)[fileAttributes fileSize];
}
NSNumber *total = [NSNumber numberWithFloat:(size/bytes)];
NSString *text=[NSString stringWithFormat:@"占用容量:%@ MB",[formatter stringFromNumber:total]];
在MAC10.5之前是使用
NSDictionary *fileAttributes = [[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:YES];这个方法,
但在这之后用attributesOfItemAtPath:error:替换。 |