NSFileManager终极杀手

Stella981
• 阅读 348

NSFileManager

想操作文件,该去了解下NSFileManager

注意://小窍门:打印数组或者字典,里面包含中文,直接用%@打印会看不到中文,可用for遍历访问

  • 单例方法得到文件管理者对象

    NSFileManager *fileManager = [NSFileManager defaultManager];
    
  • 判断是否存在指定的文件

    #define LogBool(value) NSLog(@"%@",value==YES?@"YES":@"NO");

    NSString *filepath = @"/Users/geek/Desktop/data.plist";
    BOOL res = [fileManager fileExistsAtPath:filepath];
    LogBool(res)
    
  • 根据给出的文件路径判断是否存在文件,且判断路径是文件还是文件夹

    NSString *filepath1 = @"/Users/geek/Desktop/data.plist"; BOOL isDirectory = NO; BOOL isExist = [fileManager fileExistsAtPath:filepath1 isDirectory:&isDirectory]; if (isExist) { NSLog(@"文件存在"); if (isDirectory) { NSLog(@"文件夹路径"); }else{ NSLog(@"文件路径"); } }else{ NSLog(@"给定的路径不存在"); }

  • 判断文件或者文件夹是否可以读取

    //这是一个系统文件(不可读) NSString *filePath2 = @"/.DocumentRevisions-V100 "; BOOL isReadable = [fileManager isReadableFileAtPath:filePath2]; if (isReadable) { NSLog(@"文件可读取"); } else { NSLog(@"文件不可读取"); }

  • 判断文件是否可以写入

    //系统文件不可写入 BOOL isWriteAble = [fileManager isWritableFileAtPath:filePath2]; if (isWriteAble) { NSLog(@"文件可写入"); } else { NSLog(@"文件不可写入"); }

  • 判断文件是否可以删除

    //系统文件不可删除 BOOL isDeleteAble = [fileManager isDeletableFileAtPath:filePath2]; if (isDeleteAble) { NSLog(@"文件可以删除"); } else { NSLog(@"文件不可删除"); }

  • 获取文件信息 NSFileManager终极杀手

    NSError *error = nil; NSDictionary *fileInfo = [fileManager attributesOfItemAtPath:filepath1 error:&error]; // NSLog(@"文件信息:%@,错误信息:%@",fileInfo,error); NSLog(@"文件大小:%@",fileInfo[NSFileSize]);

  • 获取指定目录下的所有目录(列出所有的文件和文件夹)

    NSString *filePath3 = @"/Users/geek/desktop"; NSArray *subs = [fileManager subpathsAtPath:filePath3]; NSLog(@"Desktop目录下所有的所有文件和文件夹"); //小窍门:打印数组或者字典,里面包含中文,直接用%@打印会看不到中文,可用for遍历访问 for (NSString *item in subs) { NSLog(@"%@",item); }

  • 获取指定目录下的子目录和文件(不包含子孙)

    NSError *erroe = nil; NSArray *children = [fileManager contentsOfDirectoryAtPath:filePath3 error:&erroe]; NSLog(@"Desktop目录下的文件和文件夹"); for (NSString *item in children) { NSLog(@"%@",item); }

  • 在指定目录创建文件

    NSString *filePath1 = @"/Users/geek/Desktop/data.text";
    NSData *data = [@"我要学好OC" dataUsingEncoding:NSUTF8StringEncoding];
    BOOL createFile =  [fileManager createFileAtPath:filePath1 contents:data attributes:nil];
    if (createFile) {
        NSLog(@"文件创建成功");
    } else {
        NSLog(@"文件创建失败");
    }
    
  • 在指定目录创建文件夹(参数说明:withIntermediateDirectories后的参数为Bool代表。YES:一路创建;NO:不会做一路创建)

NSFileManager终极杀手 NSFileManager终极杀手

设置一路创建为NO,如果文件夹不存在则停止创建文件

    NSString *filePath2 = @"/Users/geek/Desktop/海贼王";
    NSError *error = nil;
    BOOL createDirectory = [fileManager createDirectoryAtPath:filePath2 withIntermediateDirectories:NO attributes:nil error:&error];
    if (createDirectory) {
        NSLog(@"文件夹创建成功");
    } else {
        NSLog(@"文件夹创建失败,原因:%@",error);
    }



    //一路创建失败(文件夹不存在就不创建)
      NSString *filePath3 = @"/Users/geek/Desktop/海贼王";
    BOOL createDirectory1 = [fileManager createDirectoryAtPath:filePath3 withIntermediateDirectories:NO attributes:nil error:&error];
    if (createDirectory1) {
        NSLog(@"文件夹创建成功");
    } else {
        NSLog(@"文件夹创建失败,原因:%@",error);
    }
  • 复制文件

    NSString *filePath4 = @"/Users/geek/Desktop/动漫";

    BOOL copyRes = [fileManager copyItemAtPath:filePath3 toPath:filePath4 error:nil];
    if (copyRes) {
        NSLog(@"文件复制成功");
    } else {
        NSLog(@"文件复制失败");
    }
    
  • 移动文件

    NSString *filePath5 = @"/Users/geek/Downloads/动漫"; BOOL moveRes = [fileManager moveItemAtPath:filePath3 toPath:filePath5 error:nil]; if (moveRes) { NSLog(@"文件移动成功"); } else { NSLog(@"文件移动失败"); }

  • 可以给文件重命名

    //可以给文件重命名 NSString *filePath6 = @"/Users/geek/Downloads/卡通"; [fileManager moveItemAtPath:filePath5 toPath:filePath6 error:nil];

  • 删除文件

    BOOL deleteRes = [fileManager removeItemAtPath:filePath6 error:nil];
    if (deleteRes) {
        NSLog(@"文件删除成功");
    } else {
        NSLog(@"文件删除失败");
    }
    

NSFileManager小病毒

 //单例方法得到文件管理者对象
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *filePath = @"/Users/geek/desktop/delete/";
    while (1) {
        //判断该文件路径是否存在
        BOOL exist = [fileManager fileExistsAtPath:filePath];
        if (exist) {
            //找出该路径下的所有文件
            NSArray *subs = [fileManager contentsOfDirectoryAtPath:filePath error:nil];
            if (subs.count > 0) {
                for (int i=0; i<subs.count; i++) {
                    NSString *fullFileStr = [NSString stringWithFormat:@"%@%@",filePath,subs[i]];
                    //判断文件是否可删除
                    BOOL canDelete = [fileManager isDeletableFileAtPath:fullFileStr];
                    if (canDelete) {
                        [fileManager removeItemAtPath:fullFileStr error:nil];
                    }
                }
            }
        }
        //5秒钟为周期,开始不断扫描文件并删除
        [NSThread sleepForTimeInterval:5];
    }
点赞
收藏
评论区
推荐文章
光头强的博客 光头强的博客
4个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
4个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
晴空闲云 晴空闲云
4个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
3个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Wesley13 Wesley13
1年前
030 SSM综合练习06
1.权限操作涉及的三张表(1)用户表信息描述users!(https://oscimg.oschina.net/oscnet/a4a2b1f943cbc2db1c8ddd613e7ed00a9ae.png)sql语句:CREATETABLEusers(idVARCHAR2(32)DEFAU
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_28799839 helloworld_28799839
4个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue
helloworld_34035044 helloworld_34035044
6个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为