update progress bar during copy file with NSFileManager

ios, iphone, nsfilemanager, objective-c, progress-bar

Solution

In high level you may approach the following :

- Run your copying process in a seperate thread (P1)

- Run another thread (P2) which reads periodically (say every 100ms) the destination file `current_size`.

- Calculate `current_size / total_size`

- 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

Problem

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.

Original source

Related problems