FileManager
一个好久没碰的点,正巧赶上一个第三方服务的坑:
视频文件的网络地址是直接的下载链接,无法边缓存边播,只好用其服务下载到本地之后,找到其路径进行移动以及重命名。
既然移动了位置并且进行了重命名,那么,就破坏了原本封装好的缓存机制,需要自己判断是否已经存在于本地(未下载?被清理了缓存?)等等。
思路如下:
下载前查看自己移动后的路径下是否存在该文件,若无则进行下载。
下载完成后,判断是否有该用户对应的文件夹(每账号一个文件夹,简单的防重),若无则创建,确保有该文件夹之后进行remove。
moveItemAtPath 会把当前路径下文件移动到指定位置,并修改文件名和后缀为新地址指定的文件名和后缀。
当然,修改后缀的操作切记要保证不损坏源文件。
+ (NSString *)getRCVideoFileDirectory{
NSString *defaultDocuments = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@/", [NSString userId]];
NSFileManager *fm = [NSFileManager defaultManager];
BOOL isDir;
BOOL isHave = [fm fileExistsAtPath:defaultDocuments isDirectory:&isDir];
if (isDir && isHave) {
return defaultDocuments;
}else{
BOOL b_s = [fm createDirectoryAtPath:defaultDocuments withIntermediateDirectories:YES attributes:nil error:nil];
if (b_s) {
return defaultDocuments;
}
}
return @"";
}
+ (NSString *)getDownloadVideoFilePathWith:(long)msgId videoName:(NSString *)videoName{
NSString *videoPath = [NSString stringWithFormat:@"%@%ld_%@",[YTRCFileManager getRCVideoFileDirectory], msgId, videoName];
return [[NSFileManager defaultManager] fileExistsAtPath:videoPath] ? videoPath : @"";
}
+ (NSString *)renameRCSightMessageWithVideoName:(NSString *)videoName withMessageId:(long)msgId withDownloadVideoPath:(NSString *)d_vp{
NSFileManager *fm = [NSFileManager defaultManager];
NSString *newRCVideoPath = [NSString stringWithFormat:@"%@%ld_%@",[YTRCFileManager getRCVideoFileDirectory], msgId, videoName];
if ([fm fileExistsAtPath:d_vp]) {
NSError *err = nil;
BOOL b_success = [fm moveItemAtPath:d_vp toPath:newRCVideoPath error:&err];
if (b_success) {
return newRCVideoPath;
}else{
LYLog(@"追加后缀时出错%@",err.localizedDescription);
}
}else{
LYLog(@"文件不纯在\n");
}
return @"";
}
最后:
再简单的东西久了不用也会生疏乃至忘记,权当做笔记与回顾吧!