• 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
  • 相关阅读:
    adb logcat 基本用法
    系统广播 android.intent.action.KILL_BACKGROUND_SERVICE
    eclipse android 不会自动生成R.java文件和包的解决办法
    android sdk 镜像点
    android ant 自动编译打包
    java spring 框架学习
    android机型排行榜(201509)
    转: Jenkins+Gradle实现android开发持续集成、打包
    android app多渠道分发打包
    转: 从微信的故障谈谈服务可用性
  • 原文地址:https://www.cnblogs.com/thefeelingofsimple/p/2883086.html
Copyright © 2020-2023  润新知