iOS 文件move、copy无法按照时间排序问题

问题描述:项目中有需要对文件按照时间进行排序的需求,寻觅后发现可以从文件属性中获取文件的创建时间和修改时间。该文件从服务器下载后解压到指定目录下的,那么问题来了,文件的创建时间和修改时间都是文件在服务器上传过程中产生的,无法按照那个时间排序。
我的思路:测试发现,文件的move、copy方法,都是在目标文件或文件夹不存在的时候才可以成功。所以有一个思路就是最终目录外层手动创建一个文件夹,然后move、copy,最后按照手动创建的文件进行排序。

解决:在创建的目录下遍历move文件进去。在工具类中封装了一个方法,以便多次调用:

//moreFilePath:目标文件的目录   finishPath:最终文件目录,此目录需提前创建
+(BOOL)moveFilesAtPath:(NSString *)moreFilePath toPath:(NSString *)finishPath error:(NSError *__autoreleasing *)error{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *themeFileArray = [fileManager contentsOfDirectoryAtPath:moreFilePath error:error];
    
    for (NSString *fileName in themeFileArray) {
        NSString *fileNamePath = [NSString stringWithFormat:@"%@/%@",moreFilePath,fileName];
        NSString *fileFinshPath = [NSString stringWithFormat:@"%@/%@",finishPath,fileName];
        BOOL isMoveSuccess = [fileManager moveItemAtPath:fileNamePath toPath:fileFinshPath error:error];
        if (!isMoveSuccess) {
            //移动失败
            return NO;
        }
    }
    return YES;
}

使用

NSFileManager *fileManager = [NSFileManager defaultManager];
//提前创建最终目录
[fileManager createDirectoryAtPath:finishPath withIntermediateDirectories:YES attributes:nil error:&error];
NSError *moveError = nil;
BOOL isMoveSuccess = [FYTools moveFilesAtPath:moreFilePath toPath:finishPath error:&moveError];
if (isMoveSuccess) {

}else{

}

最后顺便把文件排序代码整理一下贴上:

        //获取App Group的共享目录
        NSURL *groupPath =[[NSFileManager defaultManager]containerURLForSecurityApplicationGroupIdentifier:AppGroupName];
        NSString *basePath = [groupPath URLByAppendingPathComponent:@"Download"].path;
        NSError *error = nil;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        //fileList便是包含有该文件夹下所有文件的文件名及文件夹名的数组
        NSMutableArray *fileList = [NSMutableArray arrayWithArray:[fileManager contentsOfDirectoryAtPath:basePath error:&error]];
        for (NSString * content in fileList) {
            //Delete useless file
            if ([content isEqual:@".DS_Store"]) {
                [fileList removeObject:content];
                break;
            }
        }
        //文件排序
        NSArray *sortedPaths = [fileList sortedArrayUsingComparator:^(NSString * firstPath, NSString* secondPath) {
            NSString *firstUrl = [basePath stringByAppendingPathComponent:firstPath];/*获取前一个文件完整路径*/
            NSString *secondUrl = [basePath stringByAppendingPathComponent:secondPath];/*获取后一个文件完整路径*/
            NSDictionary *firstFileInfo = [[NSFileManager defaultManager] attributesOfItemAtPath:firstUrl error:nil];/*获取前一个文件信息*/
            NSDictionary *secondFileInfo = [[NSFileManager defaultManager] attributesOfItemAtPath:secondUrl error:nil];/*获取后一个文件信息*/
            id firstData = [firstFileInfo objectForKey:NSFileCreationDate];/*获取前一个文件创建时间*/
            id secondData = [secondFileInfo objectForKey:NSFileCreationDate];/*获取后一个文件创建时间*/
//            return [firstData compare:secondData];//升序
             return [secondData compare:firstData];//降序
        }];

参考:https://cloud.tencent.com/developer/article/1117044

你可能感兴趣的:(iOS 文件move、copy无法按照时间排序问题)