使用NSFileManager更新复制文件中的进度条
我复制文件,然后我的应用程序完成启动从资源caching目录。 但是我想在复制文件时更新我的进度条。
我用下面的代码复制文件:
-(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; }
我想不出一个好主意,如何更新进度条根据复制文件的进度。
在高层次,你可能会接近以下几点:
- 在单独的线程中运行复制过程(P1)
- 运行另一个线程(P2),定期读取(比如每100ms)读取目标文件
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