文件夹的操作NSFileManager

最近好多地方用到了关于文件夹及文件路径的操作,特此总结一下.

1.获取应用目录

系统给我们提供了下面这个方法,该方法可以快速获取相关目录:

FOUNDATION_EXPORT NSArray<NSString *> *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);

其中NSSearchPathDirectory字段就是我们要找的文件目录, 这个枚举中我们平时使用较多的是如下三个:

NSDocumentDirectory 
NSCachesDirectory
NSLibraryDirectory

如获取cache文件夹:

NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;

2.创建一个文件夹

很多时候我们还要在系统文件夹下面再创建一个新的文件夹.
方法如下:
// 创建一条路径

-(NSString *)createFolder:(NSString *)folder
{    
    BOOL isDir = NO;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL existed = [fileManager fileExistsAtPath:folder isDirectory:&isDir];
    if ( !(isDir == YES && existed == YES) )
    {
        [fileManager createDirectoryAtPath:folder withIntermediateDirectories:YES attributes:nil error:nil];
    }
    return folder;
}

3.获取某文件夹下所有的文件路径

// 获取存储目录下的所有音频文件
- (NSArray *)getLocalFilePathArray:(NSString *)filePath
{
NSMutableArray *filePathArray = [NSMutableArray array];

    NSFileManager* manager = [NSFileManager defaultManager];
    NSString *filePath = [NSString stringWithFormat:@"%@/%@",NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject, filePath];
    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:filePath] objectEnumerator];

    NSString* fileName;
    while ((fileName = [childFilesEnumerator nextObject]) != nil){
        NSString* fileAbsolutePath = [filePath stringByAppendingPathComponent:fileName];
        [filePathArray addObject:fileAbsolutePath];
    }
    return filePathArray;
}

4.获取文件夹中单个文件的大小

- (long long) fileSizeAtPath:(NSString*) filePath
{
    NSFileManager* manager = [NSFileManager defaultManager];
    if ([manager fileExistsAtPath:filePath])
    {
        return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
    }
    return 0;
}

5.获取整个文件夹的大小

有了上面的获取单个文件大小的方法,我们还可以获取整个文件夹的大小,如下:
- (float ) folderSizeAtPath:(NSString) folderPath
{
NSFileManager
manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:folderPath])
return 0;
NSEnumerator childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
NSString
fileName;
long long folderSize = 0;
while ((fileName = [childFilesEnumerator nextObject]) != nil)
{
NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
folderSize += [self fileSizeAtPath:fileAbsolutePath];
}
return folderSize/(1024.0*1024.0);
}

目前用到的这么多, 当然还有许多方法未列出来, 欢迎各位同学补充.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,891评论 25 709
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,985评论 6 342
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,665评论 9 468
  • 哎!烦躁,要过年了没钱回家,手机也坏了,身体不好又要花钱搞药,两年没给爸妈钱了,本想给爸妈买点东西,到头来,没钱。...
    笔尖生情阅读 150评论 0 0