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