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
原文地址:https://www.cnblogs.com/thefeelingofsimple/p/2883086.html