使用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; } 

我想不出一个好主意,如何更新进度条根据复制文件的进度。

在高层次,你可能会接近以下几点:

  1. 在单独的线程中运行复制过程(P1)
  2. 运行另一个线程(P2),定期读取(比如每100ms)读取目标文件current_size
  3. 计算current_size / total_size
  4. 更新你的进度栏UI元素

那么你只是想找出一个文件的大小,你并不需要打开它。 就像这样使用NSFileManager

 NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:self.finalPath error:NULL]; unsigned long long fileSize = [attributes fileSize]; // in bytes