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.