IOS 文件管理共通函数整理
最近正好准备做一款文件管理器,于是小弟不才,整理了一些文件管理共通函数,也是为了以后自己调用方便。
FileManageCommon.h
// // FileManageCommon.h // Test_common // // Created by wangzhipeng on 13-1-30. // Copyright (c) 2013年 com.comsoft. All rights reserved. // #import <Foundation/Foundation.h> @interface FileManageCommon : NSObject /****************************************************************************** 函数名称 : + (NSString *)getRootDocumentPath:(NSString *)fileName 函数描述 : 获取sandbox中Document文件夹中fileName的绝对路径 输入参数 : (NSString *)fileName 输出参数 : N/A 返回参数 : (NSString *) 备注信息 : ******************************************************************************/ + (NSString *)getRootDocumentPath:(NSString *)fileName; /****************************************************************************** 函数名称 : + (NSString *)getRootCachesPath:(NSString *)fileName 函数描述 : 获取sandbox中Caches文件夹中fileName的绝对路径 输入参数 : (NSString *)fileName 输出参数 : N/A 返回参数 : (NSString *) 备注信息 : ******************************************************************************/ + (NSString *)getRootCachesPath:(NSString *)fileName; /****************************************************************************** 函数名称 : +(BOOL)isFileExists:(NSString *)fileFullPath 函数描述 : 判断文件在绝对路径fileFullPath是否存在 输入参数 : (NSString *)fileFullPath 输出参数 : N/A 返回参数 : (BOOL) 备注信息 : ******************************************************************************/ +(BOOL)isFileExists:(NSString *)fileFullPath; /****************************************************************************** 函数名称 : +(BOOL)createFolderIfNotExisting:(NSString *)folderFullPath 函数描述 : 创建绝对路径folderFullPath文件夹,当文件夹不存在的时候 输入参数 : (NSString *)folderFullPath 输出参数 : N/A 返回参数 : (BOOL) 备注信息 : ******************************************************************************/ +(BOOL)createFolderIfNotExisting:(NSString *)folderFullPath; /****************************************************************************** 函数名称 : +(NSString *)newFilePathForCreateFileAtPath:(NSString *)filePath 函数描述 : 当创建文件存在重名时,则重命名该文件(格式:文件名(数字).扩展名) 输入参数 : (NSString *)filePath 输出参数 : N/A 返回参数 : (BOOL) 备注信息 : ******************************************************************************/ +(NSString *)newFilePathForCreateFileAtPath:(NSString *)filePath; /****************************************************************************** 函数名称 : + (NSMutableArray *)getFolderContents:(NSString *)folderFullPath 函数描述 : 返回绝对路径folderfullPath中的所有文件及文件夹 输入参数 : (NSString *)folderFullPath 输出参数 : N/A 返回参数 : (NSMutableArray *) 备注信息 : ******************************************************************************/ + (NSMutableArray *)getFolderContents:(NSString *)folderFullPath; /****************************************************************************** 函数名称 : + (NSInteger)getFolderCount:(NSString *)folderFullPath 函数描述 : 返回绝对路径folderFullPath中的所有文件总数量 输入参数 : (NSString *)folderFullPath 输出参数 : N/A 返回参数 : (NSInteger) 备注信息 : ******************************************************************************/ + (NSInteger)getFolderCount:(NSString *)folderFullPath; /****************************************************************************** 函数名称 : + (UInt64 )getFolderSize:(NSString *)folderFullPath 函数描述 : 返回绝对路径folderFullPath中的所有文件总大小 输入参数 : (NSString *)folderFullPath 输出参数 : N/A 返回参数 : (UInt64) 备注信息 : ******************************************************************************/ + (UInt64)getFolderSize:(NSString *)folderFullPath; /****************************************************************************** 函数名称 : + (UInt64 )getFolderSize:(NSString *)fileFullPath 函数描述 : 返回绝对路径fileFullPath中的文件大小 输入参数 : (NSString *)fileFullPath 输出参数 : N/A 返回参数 : (UInt64) 备注信息 : ******************************************************************************/ + (UInt64) getFileSize:(NSString *)fileFullPath; /****************************************************************************** 函数名称 : + (UInt64) getFileArraySize:(NSArray *)fileFullPathArray 函数描述 : 返回fileFullPathArray中的绝对路径文件总大小 输入参数 : (NSString *)fileFullPathArray 输出参数 : N/A 返回参数 : (UInt64) 备注信息 : ******************************************************************************/ + (UInt64) getFileArraySize:(NSArray *)fileFullPathArray; /****************************************************************************** 函数名称 : +(BOOL)isPhotoFile:(NSString *)fileName 函数描述 : fileName文件是否是符合要求的图片格式 输入参数 : (NSString *)fileName 输出参数 : N/A 返回参数 : (BOOL) 备注信息 : ******************************************************************************/ +(BOOL)isPhotoFile:(NSString *)fileName; /****************************************************************************** 函数名称 : + (NSMutableArray *)filterPhotosFromArray:(NSMutableArray *)elementArray 函数描述 : elementArray中的文件是否是符合要求的图片格式 输入参数 : (NSMutableArray *)elementArray 输出参数 : N/A 返回参数 : (NSMutableArray *) 备注信息 : ******************************************************************************/ + (NSMutableArray *)filterPhotosFromArray:(NSMutableArray *)elementArray; /****************************************************************************** 函数名称 : + (NSString *)stringForAllFileSize:(UInt64)fileSize 函数描述 : 格式话返回文件大小 输入参数 : (UInt64)fileSize 输出参数 : N/A 返回参数 : (NSString *) 备注信息 : ******************************************************************************/ + (NSString *)stringForAllFileSize:(UInt64)fileSize; @end
FileManageCommon.m
// // FileManageCommon.m // Test_common // // Created by wangzhipeng on 13-1-30. // Copyright (c) 2013年 com.comsoft. All rights reserved. // #import "FileManageCommon.h" #import "EntityCommon.h" #define DefaultFileManager [NSFileManager defaultManager] #define DefaultDocumentPath NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) #define DefaultCaches NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) #define Localizable_LF_Size_Bytes @"size: %lld Bytes" #define Localizable_LF_Size_K @"size: %lld K" #define Localizable_LF_Size_M @"size: %lld.%lld M" #define Localizable_LF_Size_G @"size: %lld.%d G" #define Localizable_LF_All_Size_M @"size: %lld.%lld M" #define Localizable_LF_All_Size_G @"size: %lld.%lld G" @implementation FileManageCommon /****************************************************************************** 函数名称 : + (NSString *)getRootDocumentPath:(NSString *)fileName 函数描述 : 获取sandbox中Document文件夹中fileName的绝对路径 输入参数 : (NSString *)fileName 输出参数 : N/A 返回参数 : (NSString *) 备注信息 : ******************************************************************************/ + (NSString *)getRootDocumentPath:(NSString *)fileName { return [[DefaultDocumentPath objectAtIndex:0] stringByAppendingPathComponent:fileName]; } /****************************************************************************** 函数名称 : + (NSString *)getRootCachesPath:(NSString *)fileName 函数描述 : 获取sandbox中Caches文件夹中fileName的绝对路径 输入参数 : (NSString *)fileName 输出参数 : N/A 返回参数 : (NSString *) 备注信息 : ******************************************************************************/ + (NSString *)getRootCachesPath:(NSString *)fileName { return [[DefaultCaches objectAtIndex:0] stringByAppendingPathComponent:fileName]; } /****************************************************************************** 函数名称 : +(BOOL)isFileExists:(NSString *)fileFullPath 函数描述 : 判断文件在绝对路径fileFullPath是否存在 输入参数 : (NSString *)fileFullPath 输出参数 : N/A 返回参数 : (BOOL) 备注信息 : ******************************************************************************/ +(BOOL)isFileExists:(NSString *)fileFullPath { return [DefaultFileManager fileExistsAtPath:fileFullPath]; } /****************************************************************************** 函数名称 : +(BOOL)createFolderIfNotExisting:(NSString *)folderFullPath 函数描述 : 创建绝对路径folderFullPath文件夹,当文件夹不存在的时候 输入参数 : (NSString *)folderFullPath 输出参数 : N/A 返回参数 : (BOOL) 备注信息 : ******************************************************************************/ +(BOOL)createFolderIfNotExisting:(NSString *)folderFullPath { //Only create if the folder does not exists yet. if (![DefaultFileManager fileExistsAtPath:folderFullPath]) { [DefaultFileManager createDirectoryAtPath:folderFullPath withIntermediateDirectories:YES attributes:nil error:nil]; return YES; }else{ return NO; } } /****************************************************************************** 函数名称 : +(NSString *)newFilePathForCreateFileAtPath:(NSString *)fileFullPath 函数描述 : 当创建文件存在重名时,则重命名该文件(格式:文件名(数字).扩展名) 输入参数 : (NSString *)filePath 输出参数 : N/A 返回参数 : (BOOL) 备注信息 : ******************************************************************************/ +(NSString *)newFilePathForCreateFileAtPath:(NSString *)fileFullPath { NSString *newFilePath = fileFullPath; int i = 2; while([FileManageCommon isFileExists:newFilePath]) { newFilePath = fileFullPath; //文件名 NSString *newFilePathWithoutExtenion = [newFilePath stringByDeletingPathExtension]; //扩展名 NSString *newFilePathExtentension = [newFilePath pathExtension]; newFilePath = [NSString stringWithFormat:@"%@(%d).%@",newFilePathWithoutExtenion,i,newFilePathExtentension]; i++; } return newFilePath; } /****************************************************************************** 函数名称 : + (NSMutableArray *)getFolderContents:(NSString *)folderFullPath 函数描述 : 返回绝对路径folderfullPath中的所有文件及文件夹 输入参数 : (NSString *)folderFullPath 输出参数 : N/A 返回参数 : (NSMutableArray *) 备注信息 : ******************************************************************************/ + (NSMutableArray *)getFolderContents:(NSString *)folderFullPath { NSMutableArray *files = [[NSMutableArray alloc] init]; NSArray *directoryContent = [DefaultFileManager contentsOfDirectoryAtPath:folderFullPath error:nil]; for(NSString *fileName in directoryContent) { NSString *fileFullPath = [folderFullPath stringByAppendingPathComponent:fileName]; //获取普通文件或文件夹详细信息 NSDictionary *fileAttributes = [DefaultFileManager attributesOfItemAtPath:fileFullPath error:nil]; if (!fileAttributes) { continue; } if([fileName isEqualToString:@"Inbox"] && [folderFullPath isEqualToString:[FileManageCommon getRootDocumentPath:nil]]) { continue; } //模拟器中测试过滤条件 if([fileName isEqualToString:@".DS_Store"]) { continue; } //目录元素 DirectoryElement *element = [[DirectoryElement alloc] init]; //绝对路径 element.path = fileFullPath; //文件名称 element.name = fileName; NSLog(@"%@", fileName); //文件名称(大写) element.nameForSort = [fileName uppercaseString]; //文件创建日期 element.date = [fileAttributes objectForKey:NSFileCreationDate]; //文件修改日期 element.modificationDate = [fileAttributes objectForKey:NSFileModificationDate]; NSString *fileType = [fileAttributes objectForKey:NSFileType]; if([fileType isEqualToString:NSFileTypeDirectory]) { //类型:文件夹 element.elementType = ElementType_Folder; //文件夹中子文件数目 element.numChilds = [[DefaultFileManager contentsOfDirectoryAtPath:fileFullPath error:nil] count]; } else { //类型:普通文件 element.elementType = ElementType_NomalFiles; //文件大小 element.fileSize = [[fileAttributes objectForKey:NSFileSize] unsignedLongLongValue]; //扩展名(大写) element.fileExtension = [[fileName pathExtension] uppercaseString]; } [files addObject:element]; } return files; } /****************************************************************************** 函数名称 : + (NSInteger)getFolderCount:(NSString *)folderFullPath 函数描述 : 返回绝对路径folderFullPath中的所有文件总数量 输入参数 : (NSString *)folderFullPath 输出参数 : N/A 返回参数 : (NSInteger) 备注信息 : ******************************************************************************/ + (NSInteger)getFolderCount:(NSString *)folderFullPath { NSInteger fileCount = 0; NSArray *folderContentsArray = [DefaultFileManager contentsOfDirectoryAtPath:folderFullPath error:nil]; for(NSString *name in folderContentsArray) { if([name isEqualToString:@"Inbox"]) { continue; } NSString *fileName = [folderFullPath stringByAppendingPathComponent:name]; NSDictionary *fileAttributes = [DefaultFileManager attributesOfItemAtPath:fileName error:nil]; NSString *fileType = [fileAttributes objectForKey:NSFileType]; if([fileType isEqualToString:NSFileTypeDirectory]) { NSString *currentPath = [folderFullPath stringByAppendingPathComponent:name]; fileCount = fileCount + [FileManageCommon getFolderCount:currentPath]; } else { fileCount++; } } return fileCount; } /****************************************************************************** 函数名称 : + (UInt64 )getFolderSize:(NSString *)folderFullPath 函数描述 : 返回绝对路径folderFullPath中的所有文件总大小 输入参数 : (NSString *)folderFullPath 输出参数 : N/A 返回参数 : (UInt64) 备注信息 : ******************************************************************************/ + (UInt64)getFolderSize:(NSString *)folderFullPath { UInt64 folderSize = 0; NSArray *folderContentsArray = [DefaultFileManager contentsOfDirectoryAtPath:folderFullPath error:nil]; for(NSString *name in folderContentsArray) { if([name isEqualToString:@"Inbox"]) { continue; } NSString *fileName = [folderFullPath stringByAppendingPathComponent:name]; NSDictionary *fileAttributes = [DefaultFileManager attributesOfItemAtPath:fileName error:nil]; NSString *fileType = [fileAttributes objectForKey:NSFileType]; if([fileType isEqualToString:NSFileTypeDirectory]) { NSString *currentPath = [folderFullPath stringByAppendingPathComponent:name]; folderSize = folderSize + [FileManageCommon getFolderSize:currentPath]; } else { UInt64 fileSize = [[fileAttributes objectForKey:NSFileSize] unsignedLongLongValue]; folderSize = folderSize + fileSize; } } return folderSize; } /****************************************************************************** 函数名称 : + (UInt64 )getFolderSize:(NSString *)fileFullPath 函数描述 : 返回绝对路径fileFullPath中的文件大小 输入参数 : (NSString *)fileFullPath 输出参数 : N/A 返回参数 : (UInt64) 备注信息 : ******************************************************************************/ + (UInt64) getFileSize:(NSString *)fileFullPath { NSDictionary *fileAttributes = [DefaultFileManager attributesOfItemAtPath:fileFullPath error:nil]; UInt64 fileSize = [[fileAttributes objectForKey:NSFileSize] unsignedLongLongValue]; return fileSize; } /****************************************************************************** 函数名称 : + (UInt64) getFileArraySize:(NSArray *)fileFullPathArray 函数描述 : 返回fileFullPathArray中的绝对路径文件总大小 输入参数 : (NSString *)fileFullPathArray 输出参数 : N/A 返回参数 : (UInt64) 备注信息 : ******************************************************************************/ + (UInt64) getFileArraySize:(NSArray *)fileFullPathArray { UInt64 fileArraySize = 0; for(NSString *filePath in fileFullPathArray){ fileArraySize +=[FileManageCommon getFileSize:filePath]; } return fileArraySize; } /****************************************************************************** 函数名称 : + (BOOL)isPhotoFile:(NSString *)fileName 函数描述 : fileName文件是否是符合要求的图片格式 输入参数 : (NSString *)fileName 输出参数 : N/A 返回参数 : (BOOL) 备注信息 : ******************************************************************************/ + (BOOL)isPhotoFile:(NSString *)fileName { NSString *fileType = [[fileName pathExtension] uppercaseString]; if ([fileType isEqualToString:@"PNG"]) { return YES; }else if ([fileType isEqualToString:@"JPG"]) { return YES; }else if ([fileType isEqualToString:@"JPEG"]) { return YES; }else if ([fileType isEqualToString:@"GIF"]) { return YES; }else if ([fileType isEqualToString:@"BMP"]) { return YES; }else if ([fileType isEqualToString:@"TIP"]) { return YES; }else if ([fileType isEqualToString:@"TIFF"]) { return YES; }else if ([fileType isEqualToString:@"TIF"]) { return YES; }else{ return NO; } } /****************************************************************************** 函数名称 : + (NSMutableArray *)filterPhotosFromArray:(NSMutableArray *)elementArray 函数描述 : elementArray中的文件是否是符合要求的图片格式 输入参数 : (NSMutableArray *)elementArray 输出参数 : N/A 返回参数 : (NSMutableArray *) 备注信息 : ******************************************************************************/ + (NSMutableArray *)filterPhotosFromArray:(NSMutableArray *)elementArray { NSMutableArray *paramArrayOfPhotos = [[NSMutableArray alloc] init]; for (DirectoryElement *element in elementArray) { if(element.elementType == ElementType_NomalFiles) { if ([self isPhotoFile:element.name]) { [paramArrayOfPhotos addObject:element]; } } } return paramArrayOfPhotos; } /****************************************************************************** 函数名称 : + (NSString *)stringForAllFileSize:(UInt64)fileSize 函数描述 : 格式话返回文件大小 输入参数 : (UInt64)fileSize 输出参数 : N/A 返回参数 : (NSString *) 备注信息 : ******************************************************************************/ + (NSString *)stringForAllFileSize:(UInt64)fileSize { if (fileSize<1024) {//Bytes/Byte if (fileSize>1) { return [NSString stringWithFormat:Localizable_LF_Size_Bytes, fileSize]; }else {//==1 Byte return [NSString stringWithFormat:Localizable_LF_Size_Bytes, fileSize]; } } if ((1024*1024)>(fileSize)&&(fileSize)>1024) {//K return [NSString stringWithFormat:Localizable_LF_Size_K, fileSize/1024]; } if ((1024*1024*1024)>fileSize&&fileSize>(1024*1024)) {//M return [NSString stringWithFormat:Localizable_LF_All_Size_M, fileSize/(1024*1024), fileSize%(1024*1024)/(1024*102)]; } if (fileSize>(1024*1024*1024)) {//G return [NSString stringWithFormat:Localizable_LF_All_Size_G, fileSize/(1024*1024*1024), fileSize%(1024*1024*1024)/(1024*1024*102)]; } return nil; } @end
EntityCommon.h
// // EntityCommon.h // Test_common // // Created by wangzhipeng on 13-1-30. // Copyright (c) 2013年 com.comsoft. All rights reserved. // #import <Foundation/Foundation.h> @interface EntityCommon : NSObject @end typedef enum{ //普通文件 ElementType_NomalFiles = 0, //文件夹 ElementType_Folder = 1 }ElementLocationType; @interface DirectoryElement : NSObject //文件名称 @property (strong, nonatomic) NSString *name; //文件名称(大写) @property (strong, nonatomic) NSString *nameForSort; //绝对路径 @property (strong, nonatomic) NSString *path; //特定为ElementType_NomalFiles,文件大小 @property (assign, nonatomic) UInt64 fileSize; //特定为ElementType_Folder,文件夹中子文件数目 @property (assign, nonatomic) NSInteger numChilds; //UI是否选中该文件或文件夹标识 @property (assign, nonatomic) BOOL selected; //创建时间 @property (strong, nonatomic) NSDate *date; //修改时间 @property (strong, nonatomic) NSDate *modificationDate; //特定为ElementType_NomalFiles,文件扩展名(大写) @property (strong, nonatomic) NSString *fileExtension; //类型 @property (assign, nonatomic) NSInteger elementType; //备于特殊用途,如存储上传到Dropbox的路径或其他。 @property (strong, nonatomic) NSString *specialPath; //property for photos in camera. //URL @property (strong, nonatomic) NSURL *url; //缩略图 @property (strong, nonatomic) UIImage *imageLogo; @end