Usando moveItemAtPath debería funcionar. En ocasiones, el directorio no se renombra en realidad, sino que se traslada a otro lugar. En este caso, también se debe crear la estructura de directorio de la ruta de destino. Aquí un fragmento de código que estoy usando que funciona bien:
-(BOOL)renameDir:(NSString *)dirPath asDir:(NSString *)newDirPath cleanExisting:(BOOL)clean
{
NSError *error = nil;
NSFileManager *fm = [NSFileManager defaultManager];
if (clean && [fm fileExistsAtPath:newDirPath])
{
[fm removeItemAtPath:newDirPath error:&error];
if (error != nil)
{
NSLog(@"Error while renameDir %@ as %@ :\n%@",dirPath,newDirPath,error);
return NO;
}
}
//Make sure container directories exist
NSString *newDirContainer = [newDirPath stringByDeletingLastPathComponent];
if (![fm fileExistsAtPath:newDirContainer])
{
[fm createDirectoryAtPath:newDirContainer withIntermediateDirectories:YES attributes:nil error:&error];
}
if (error==nil)
{
[fm moveItemAtPath:dirPath toPath:newDirPath error:&error];
}
if (error!=nil)
{
NSLog(@"error while moveItemAtPath : %@",error);
}
return (error==nil);
}
Disculpa si me perdí algo en alguna parte, pero ¿no es necesario que elimines el directorio anterior también? –
@ Peter Johnson: si no necesita eliminar su directorio anterior, puede usar el mismo código reemplazando la línea: [[NSFileManager defaultManager] moveItemAtPath: oldFilePath toPath: newFilePath error: & error]; a [[NSFileManager defaultManager] copyItemAtPath: oldFilePath toPath: newFilePath error: & error] ;. – iPhoneDv
la respuesta sugerida por mackross es mucho más directa y menos intrincada. –