最近正好准备做一款文件管理器,于是小弟不才,整理了一些文件管理共通函数,也是为了以后自己调用方便。
FileManageCommon.h
//
// FileManageCommon.h
// Test_common
//
// Created by wangzhipeng on 13-1-30.
// Copyright (c) 2013年 com.comsoft. All rights reserved.
//
#import
@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
@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
阅读(1158) | 评论(0) | 转发(0) |