NSFileManager和NSFileHandle(附:获取文件大小 )
//file文件操作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"]];///////////////////////////////////////////////////////////////////////////////////////////////////////////基本文件操作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];
}