CopyItemAtPath всегда терпит неудачу с ошибкой File exists
Я пытаюсь скопировать каталоги с помощью copyItemAtPath, но каждый раз, когда он терпит неудачу, "Ошибка операции не может быть завершена".
Здесь код, который я использую
NSLog(@"Copying from: %@ to: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"template_1_path"], path);
if(![file_manager copyItemAtPath:[NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"template_1_path"]] toPath:[NSString stringWithFormat:@"%@", path] error:&error]) {
NSLog(@"%@" [error localizedDescription]);
}
Пример журнала -
"Copying from: /Users/testuser/Sites/example_site to: /Users/testuser/Desktop"
"The operation couldn’t be completed. File exists"
Любые идеи о том, что я делаю неправильно?
Спасибо заранее!
Ответы
Ответ 1
Кажется, вы пытаетесь скопировать файл "/Users/testuser/Sites/example_site" в файл "/Users/testuser/Desktop/example_site", предполагая, что вы можете просто указать целевой каталог, и он будет использовать исходное имя файла. Это не работает. Quoth документация:
Когда файл копируется, конечный путь должен заканчиваться именем файла - нет никакого подразумеваемого принятия исходного имени файла.
Ответ 2
Вы пытаетесь скопировать что-то с тем же именем файла. Попробуйте что-то вроде этого:
- (BOOL)copyFolderAtPath:(NSString *)sourceFolder toDestinationFolderAtPath:(NSString*)destinationFolder {
//including root folder.
//Just remove it if you just want to copy the contents of the source folder.
destinationFolder = [destinationFolder stringByAppendingPathComponent:[sourceFolder lastPathComponent]];
NSFileManager * fileManager = [ NSFileManager defaultManager];
NSError * error = nil;
//check if destinationFolder exists
if ([ fileManager fileExistsAtPath:destinationFolder])
{
//removing destination, so soucer may be copied
if (![fileManager removeItemAtPath:destinationFolder error:&error])
{
NSLog(@"Could not remove old files. Error:%@",error);
[error release];
return NO;
}
}
error = nil;
//copying destination
if ( !( [ fileManager copyItemAtPath:sourceFolder toPath:destinationFolder error:&error ]) )
{
NSLog(@"Could not copy report at path %@ to path %@. error %@",sourceFolder, destinationFolder, error);
[error release];
return NO;
}
return YES;
}