2011-04-26 13 views
11

Estoy tratando de copiar directorios con copyItemAtPath, pero cada vez que falla con un error "La operación no pudo completarse. El archivo existe".copyItemAtPath siempre falla con el archivo existe el error

Aquí está el código que estoy usando

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

ejemplo del registro -

"Copying from: /Users/testuser/Sites/example_site to: /Users/testuser/Desktop" 
"The operation couldn’t be completed. File exists" 

Alguna idea sobre lo que estoy haciendo mal?

¡Gracias de antemano!

Respuesta

21

Parece que intenta copiar el archivo "/ Users/testuser/Sites/example_site" en el archivo "/ Users/testuser/Desktop/example_site", suponiendo que solo puede especificar el directorio de destino y usará el nombre del archivo fuente Esto no funciona. Quoth the documentation:

Cuando se copia un archivo, la ruta de destino debe terminar en un nombre de archivo, no hay implícita la adopción del nombre del fichero fuente.

+0

Esto también es cierto para moveItemAtPath: ... y moveItemAtURL: ... – LaborEtArs

16

Está tratando de copiar algo con el mismo nombre de archivo. Pruebe algo como esto:

- (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; 
} 
Cuestiones relacionadas