您的位置:首页 > 其它

OC关于NSFileManager的再详解

2015-08-17 11:55 330 查看
#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:filePath
isDirectory:&isDirectory];

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

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

        //如果文件为目录,参数isDirectory为YES,否则为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:dst
error:&error];
       if (error) {
           NSLog(@"%@",error);
           exit(-1);
        }

        

        

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

        

        [fileManager moveItemAtPath:[PATHstringByAppendingPathComponent:@"复制文件3"]toPath:[PATHstringByAppendingPathComponent:@"未命名文件夹/复制文件3"]error:&error];
       if (error) {
           NSLog(@"%@",error);
           exit(-1);
        }

需要注意的是当你移动文件时,如果原路径和新路径都在同一个文件夹中,那么新文件名会覆盖掉旧的文件名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: