使用 NSFileManager 在复制文件期间更新进度条
Posted
技术标签:
【中文标题】使用 NSFileManager 在复制文件期间更新进度条【英文标题】:update progress bar during copy file with NSFileManager 【发布时间】:2013-07-06 19:39:07 【问题描述】:我复制文件然后我的应用程序完成从资源启动到缓存目录。 但我想在复制文件的过程中更新我的进度条。
我用下面的代码复制文件:
-(BOOL)copyDirectory:(NSString*)source toDirectory:(NSString*)targat
BOOL retVal = YES;
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSError *error;
if ([fileManager fileExistsAtPath:targat] == YES)
NSError *error = nil;
[fileManager removeItemAtPath:targat error:&error];
if(![fileManager copyItemAtPath:source
toPath:targat
error:&error])
NSLog(@"Error copy files: %@", [error description]);
retVal = NO;
[fileManager release];
return retVal;
想不出好主意,如何根据复制文件的进度更新进度条。
【问题讨论】:
【参考方案1】:在高层次上,你可以接近以下:
-
在单独的线程中运行复制过程 (P1)
运行另一个线程 (P2),它会定期(比如每 100 毫秒)读取目标文件
current_size
。
计算current_size / total_size
更新进度条 UI 元素
然后您只想找出文件的大小,实际上不必打开它。只需像这样使用NSFileManager
:
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:self.finalPath error:NULL];
unsigned long long fileSize = [attributes fileSize]; // in bytes
【讨论】:
您是否有示例代码演示如何在一个单独的线程中复制,该线程会告诉您何时完成复制以上是关于使用 NSFileManager 在复制文件期间更新进度条的主要内容,如果未能解决你的问题,请参考以下文章
NSFileManager 是不是将修改日期等元数据与文件一起复制?
解决[[NSFileManager defaultManager] contentsOfDirectoryAtPath 方法获取不到数据的bug