Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188635
  • 博文数量: 60
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-19 21:43
个人简介

readonly

文章分类

全部博文(60)

文章存档

2013年(60)

我的朋友

分类: iOS平台

2013-02-20 08:37:51

最近正好准备做一款文件管理器,于是小弟不才,整理了一些文件管理共通函数,也是为了以后自己调用方便。

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
阅读(1161) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~