在iOS Objective-C中将文件从一个目录复制到另一个目录
在我的应用程序中,我想将文件从在iOS Objective-C中将文件从一个目录复制到另一个目录,ios,objective-c,performance,copy,nsthread,Ios,Objective C,Performance,Copy,Nsthread,在我的应用程序中,我想将文件从一个目录复制到另一个目录。在源目录中有文件和文件夹 我在下面的代码中执行此操作: - (BOOL)copyDirectory:(NSString*)Directory toDirectory:(NSString*)targetDirectory { NSLog(@"start copy"); @try { NSError *error = nil; NSString *path = [NSSearchPathF
一个目录复制到另一个目录
。在源目录中有文件和文件夹
我在下面的代码中执行此操作:
- (BOOL)copyDirectory:(NSString*)Directory toDirectory:(NSString*)targetDirectory
{
NSLog(@"start copy");
@try
{
NSError *error = nil;
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) objectAtIndex:0];
NSString *folderPath = [path stringByAppendingPathComponent:targetDirectory];
BOOL succes = [[NSFileManager defaultManager] fileExistsAtPath:folderPath];
if(succes){
return NO;
}
else
{
NSString *wwwPath = [[NSBundle mainBundle] pathForResource:Directory ofType:nil];
NSArray *target= [[NSFileManager defaultManager] contentsOfDirectoryAtPath:wwwPath error:&error];
[[NSFileManager defaultManager] createDirectoryAtPath:folderPath withIntermediateDirectories:NO attributes:nil error:nil];
int a = 0 ;
for(a = 0 ; a < target.count;a++){
NSString *temp = [target objectAtIndex:a];
if([temp rangeOfString:@"."].location == NSNotFound)
{
NSString *sourceDirectory = [NSString stringWithFormat:@"%@/%@",Directory,temp ];
NSString *DestanistionDirectory = [NSString stringWithFormat:@"%@/%@",targetDirectory,temp];
if([self copyDirectory:sourceDirectory toDirectory:DestanistionDirectory] == NO){
return NO;
}
}
else
{
NSString *source = [NSString stringWithFormat:@"%@/%@",wwwPath,temp];
NSString *target = [NSString stringWithFormat:@"%@/%@",folderPath,temp];
BOOL result = [[NSFileManager defaultManager] copyItemAtPath:source toPath:target error:&error];
if(result)
currentFileCounter++;
[self performSelectorInBackground:@selector(updatePrograsBar) withObject:nil];
if(error != nil){
if(IsDEBUG) NSLog(@"error: %@",[error description]);
return NO;
}
}
}
}
}
@catch (NSException *exception)
{
if(IsDEBUG)NSLog(@"%@",exception.description);
return NO;
}
NSLog(@"end copy");
return YES;
}
在递归中,我调用新线程
- (BOOL)copyDirectory:(NSString*)Directory toDirectory:(NSString*)targetDirectory
{
NSLog(@"start copy");
@try
{
NSError *error = nil;
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) objectAtIndex:0];
NSString *folderPath = [path stringByAppendingPathComponent:targetDirectory];
BOOL succes = [[NSFileManager defaultManager] fileExistsAtPath:folderPath];
if(succes){
return NO;
}
else
{
NSString *wwwPath = [[NSBundle mainBundle] pathForResource:Directory ofType:nil];
NSArray *target= [[NSFileManager defaultManager] contentsOfDirectoryAtPath:wwwPath error:&error];
[[NSFileManager defaultManager] createDirectoryAtPath:folderPath withIntermediateDirectories:NO attributes:nil error:nil];
int a = 0 ;
for(a = 0 ; a < target.count;a++){
NSString *temp = [target objectAtIndex:a];
if([temp rangeOfString:@"."].location == NSNotFound)
{
NSString *sourceDirectory = [NSString stringWithFormat:@"%@/%@",Directory,temp ];
NSString *DestanistionDirectory = [NSString stringWithFormat:@"%@/%@",targetDirectory,temp];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self copyDirectory:sourceDirectory toDirectory:DestanistionDirectory];
});
}
else
{
NSString *source = [NSString stringWithFormat:@"%@/%@",wwwPath,temp];
NSString *target = [NSString stringWithFormat:@"%@/%@",folderPath,temp];
BOOL result = [[NSFileManager defaultManager] copyItemAtPath:source toPath:target error:&error];
if(result)
currentFileCounter++;
[self performSelectorInBackground:@selector(updatePrograsBar) withObject:nil];
if(error != nil){
if(IsDEBUG) NSLog(@"error: %@",[error description]);
return NO;
}
}
}
}
}
@catch (NSException *exception)
{
if(IsDEBUG)NSLog(@"%@",exception.description);
return NO;
}
NSLog(@"end copy");
return YES;
}
直到完成所有操作。您的代码有几个问题,但首先要做的是-为什么不直接使用
-[NSFileManager copyItemAtPath:toPath:error:
来复制文件夹?监视数据大小并将其与原始包进行比较。复制文件时,我需要更新程序栏@马鲁克斯
- (BOOL)copyDirectory:(NSString*)Directory toDirectory:(NSString*)targetDirectory
{
NSLog(@"start copy");
@try
{
NSError *error = nil;
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) objectAtIndex:0];
NSString *folderPath = [path stringByAppendingPathComponent:targetDirectory];
BOOL succes = [[NSFileManager defaultManager] fileExistsAtPath:folderPath];
if(succes){
return NO;
}
else
{
NSString *wwwPath = [[NSBundle mainBundle] pathForResource:Directory ofType:nil];
NSArray *target= [[NSFileManager defaultManager] contentsOfDirectoryAtPath:wwwPath error:&error];
[[NSFileManager defaultManager] createDirectoryAtPath:folderPath withIntermediateDirectories:NO attributes:nil error:nil];
int a = 0 ;
for(a = 0 ; a < target.count;a++){
NSString *temp = [target objectAtIndex:a];
if([temp rangeOfString:@"."].location == NSNotFound)
{
NSString *sourceDirectory = [NSString stringWithFormat:@"%@/%@",Directory,temp ];
NSString *DestanistionDirectory = [NSString stringWithFormat:@"%@/%@",targetDirectory,temp];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self copyDirectory:sourceDirectory toDirectory:DestanistionDirectory];
});
}
else
{
NSString *source = [NSString stringWithFormat:@"%@/%@",wwwPath,temp];
NSString *target = [NSString stringWithFormat:@"%@/%@",folderPath,temp];
BOOL result = [[NSFileManager defaultManager] copyItemAtPath:source toPath:target error:&error];
if(result)
currentFileCounter++;
[self performSelectorInBackground:@selector(updatePrograsBar) withObject:nil];
if(error != nil){
if(IsDEBUG) NSLog(@"error: %@",[error description]);
return NO;
}
}
}
}
}
@catch (NSException *exception)
{
if(IsDEBUG)NSLog(@"%@",exception.description);
return NO;
}
NSLog(@"end copy");
return YES;
}
-(BOOL)copyDirectory:(NSString*)Directory to Directory:(NSString*)target Directory