OC关于NSFileManager的再详解

来源:互联网 发布:天下3男脸数据 编辑:程序博客网 时间:2024/06/02 07:33

#define PATH @"/Users/qianfeng/Desktop/CheckOut"


#define ShowArray(array) for(NSString *str in array){\

NSLog(@"%@",str);\

}


int main(int argc,constchar * argv[]) {

    @autoreleasepool {

              

//创建单例对象,即是文件管理对象

       NSFileManager *fileManager=[NSFileManagerdefaultManager];

        

       NSError *error=nil;//定义一个空的错误信息

        

#pragma mark -浅度遍历

#pragma mark 因为这个方法只查看在指定目录下的文件和子目录,并不查看子目录下的内容

        

        //查看某个目录下的文件或者子目录

       NSArray * array=[fileManagercontentsOfDirectoryAtPath:PATHerror:&error];

        

        //如果查看失败,例如目录不存在,该方法会创建一个NSError对象,让传入的指针指向这个对象

        //如果成功,会创建一个数组,装文件和子目录名称,返回数组地址

       if (error) {

           NSLog(@"%@",error);

           exit(-1);//表示异常退出

        }

       ShowArray(array);

#pragma mark - 深度遍历

#pragma mark 返回指定目录下的文件名和子目录名,同时遍历子目录下的内容

        

       NSArray *array2=[fileManagersubpathsOfDirectoryAtPath:PATHerror:&error];

       if (error) {

           NSLog(@"%@",error);

           exit(-1);

        }

       ShowArray(array2);

        

        

#pragma mark - 创建路径

       //拼接路径

        NSString * pathString=[PATH stringByAppendingPathComponent:@"down/up/dir"];

       //创建目录

        

        [fileManager createDirectoryAtPath:pathStringwithIntermediateDirectories:YESattributes:nilerror:&error];

        

        //第二个参数表示是否创建中间目录,(此例中创建中间目录down文件夹,up文件夹),如果选NO,当缺失中间目录,创建失败,报错。如果选YES,会自动补全缺失的中间目录,即中间目录也会被创建。可以同时添加多个中间目录

        //第三个参数表示目录属性,通常传入nil,表示默认属性

       if (error) {

           NSLog(@"%@",error);

           exit(-1);

        }

#pragma mark - 创建文件

      NSString * str=@"我是写入的字符串";

        NSData * data=[strdataUsingEncoding:NSUTF8StringEncoding];

        //str转换成二进制数据包NSData类型

        BOOL ret=[fileManagercreateFileAtPath:[PATHstringByAppendingPathComponent:@"write.txt"]contents:dataattributes:nil];

        //第二个参数contents:写入文件的内容。如果只创建文件,不想写入内容,填入nil

        

        //通过返回值报错

       if (ret==NO) {

            //perror 可以打印出当前错误

            //打印最近一次系统错误信息

           perror("creatFile");

           exit(-1);

        }

#pragma mark - 删除文件

        

        //删除目录或文件

        [fileManager removeItemAtPath:[PATHstringByAppendingPathComponent:@"down"]error:&error];

       if (error) {

           NSLog(@"%@",error);

            

        }

        

        

#pragma mark - 判断文件是否存在

        

        NSString *filePath=[PATHstringByAppendingPathComponent:@"write.txt"];

        //判断一个文件是否存在,是否是目录

       BOOL isDirectory=NO;

       BOOL ret2=[fileManagerfileExistsAtPath:filePathisDirectory:&isDirectory];

        

       NSLog(@"%d-%d",ret2 ,isDirectory);

        //如果文件存在,返回值retYES,否则为NO

        //如果文件为目录,参数isDirectoryYES,否则为NO

        

#pragma mark - 获取一个文件的属性

        

       NSDictionary *attribute=[fileManagerattributesOfItemAtPath:PATHerror:&error];

        

       if (error) {

           NSLog(@"%@",error);

           exit(-1);

        }

       NSLog(@"%@",attribute);

        

        //取出文件大小,取出的是一个NSNumber对象,通过integerValue返回数字

        //size_t 一般用来计数

       size_t size=[[attributeobjectForKey:@"NSFileSize"]integerValue];//打印出文件的大小

        

       NSLog(@"%lu",size);

#pragma mark - 复制文件

        NSString *dst=[PATHstringByAppendingPathComponent:@"拷贝文件.txt"];

        NSString *src2=[PATHstringByAppendingPathComponent:@"write.txt"];

        //目的目录一定是完整的,最后落实到生成文件的名字,即使生成文件和源文件同名,也必须写明

        

        

        [fileManagercopyItemAtPath:src2toPath:dsterror:&error];

       if (error) {

           NSLog(@"%@",error);

           exit(-1);

        }

        

        

#pragma mark - 移动文件或目录,相当于把文件内容移到目标文件

        

        [fileManager moveItemAtPath:[PATHstringByAppendingPathComponent:@"复制文件3"]toPath:[PATHstringByAppendingPathComponent:@"未命名文件夹/复制文件3"]error:&error];

       if (error) {

           NSLog(@"%@",error);

           exit(-1);

        }


需要注意的是当你移动文件时,如果原路径和新路径都在同一个文件夹中,那么新文件名会覆盖掉旧的文件名


0 0
原创粉丝点击