问题描述:项目中有需要对文件按照时间进行排序的需求,寻觅后发现可以从文件属性中获取文件的创建时间和修改时间。该文件从服务器下载后解压到指定目录下的,那么问题来了,文件的创建时间和修改时间都是文件在服务器上传过程中产生的,无法按照那个时间排序。
我的思路:测试发现,文件的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];//降序
}];