update progress bar during copy file with NSFileManager

匿名 (未验证) 提交于 2019-12-03 10:24:21

问题:

I copy files then my application is finish launching from resource to caches directory. but I want to update my progress bar during copying the files.

I copy the file with the code below:

-(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; }

I can not think about a good idea, how to update the progress bar According to the progress of copying files.

回答1:

In high level you may approach the following :

  1. Run your copying process in a seperate thread (P1)
  2. Run another thread (P2) which reads periodically (say every 100ms) the destination file current_size.
  3. Calculate current_size / total_size
  4. Update you progress bar UI element

Then you just want to find out the size of a file, you don't actually have to open it. Just use NSFileManager like this:

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!