2018-01-16 文件读写一些经验总结

废话不多说,直接上代码

NSError * error;
    //取出dist文件夹
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    NSString *filePath = [docDir stringByAppendingPathComponent:@"dist"];
    // 创建一个文件管理器
    NSFileManager *manager = [NSFileManager defaultManager];
    // 文件是否存在
    BOOL isExists;


//     删除文件    
    NSString *distPath = [[[NSBundle mainBundle] bundlePath]
                      stringByAppendingPathComponent:@"dist"];
    isExists = [manager fileExistsAtPath:distPath];
    if(isExists){
            BOOL isDele = [manager removeItemAtPath:distPath error:&error];
            if (isDele) {
                NSLog(@"删除成功");
            } else {
                NSLog(@"删除失败,原因%@",error.localizedDescription);
            }
// 这种方式可以打印出删除失败原因的中文描述
    }

//无法复制替换到bundle中文件 
//因为bundle中文件可以读,不可以写入,不可以修改,不可以增加
    isExists = [manager fileExistsAtPath:filePath];
    if (isExists) {
        NSLog(@"更新文件夹存在");
        // 拷贝文件
        NSString *copyPath = [docDir stringByAppendingPathComponent:@"destination"];
        if(![[NSFileManager defaultManager] fileExistsAtPath:copyPath]) {
             BOOL  isCreate =[[NSFileManager defaultManager] createDirectoryAtPath:copyPath withIntermediateDirectories:YES attributes:nil error:nil];
            if(isCreate) NSLog(@"创建成功!");
           }

        NSError * error;
//这里务必添加dist文件,目标路径必须是新增的、以前没有的。如果dist文件已存在,复制就会失败,报错误提示:目标文件已存在
        copyPath = [copyPath stringByAppendingPathComponent:@"dist"];
        BOOL isCopy = [manager copyItemAtPath:filePath toPath:distPath error:&error];
        if (isCopy) {
            NSLog(@"拷贝成功");
        } else {
            NSLog(@"拷贝失败%@",error);
        }
        
        // 移动文件
        NSString *movePath = [docDir stringByAppendingPathComponent:@"Move"];
        if (![[NSFileManager defaultManager] fileExistsAtPath:distPath]) {
            BOOL  isCreate =[[NSFileManager defaultManager] createDirectoryAtPath:distPath withIntermediateDirectories:YES attributes:nil error:nil];
            if(isCreate) NSLog(@"创建成功!");
        }
//同样移动的文件夹目标应该是不存在的。下面这句话保证了这一点,有则报错
        movePath = [movePath stringByAppendingPathComponent:@"dist"];
        BOOL isMove = [manager moveItemAtPath:filePath toPath:distPath error:&error];
        if (isMove) {
            NSLog(@"移动成功");
            [VKToast showToast:@"更新成功!"];
        } else {
            NSLog(@"移动失败");
            [VKToast showToast:[NSString stringWithFormat:@"更新失败,%@",error.localizedDescription]];
        }
        
    } else {
        NSLog(@"更新文件夹不存在");
        [VKToast showToast:@"Document中未发现更新文件夹"];
        // 创建文件夹
//        [manager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
    }

总结:1.move与copy 既支持文件的移动与复制,也支持整个文件夹的移动与复制
2.move与copy的最终目的路径,是不能存在目标文件或者目标文件夹的。
3.如果目标路径不存在,要优先进行路径创建,就是文件夹的创建
4.最后在将你要复制后文件名,拼接在目标路径的后面!!!!

你可能感兴趣的:(2018-01-16 文件读写一些经验总结)