如何重命名目录?

iPh*_*Dev 7 iphone objective-c nsfilemanager

我在应用程序目录的Documents文件夹中创建了一个文件夹.

我想通过代码重命名该文件夹,但无法理解如何操作.

请帮帮我.

mac*_*oss 16

你有没有尝试过?

    NString *newDirectoryName = @"<new folder name>";    
    NSString *oldPath = @"<path to the old folder>";
    NSString *newPath = [[oldPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:newDirectoryName];
    NSError *error = nil;
    [[NSFileManager defaultManager] moveItemAtPath:oldPath toPath:newPath error:&error];
    if (error) {
        NSLog(@"%@",error.localizedDescription);
        // handle error
    }
Run Code Online (Sandbox Code Playgroud)

  • 这样工作正常,并且比上面给出的例子复杂得多.这应该被标记为正确的答案.+1 (3认同)

iPh*_*eDv 7

NSString *oldDirectoryPath = @"Type your old directory Path";

NSArray *tempArrayForContentsOfDirectory =[[NSFileManager defaultManager] contentsOfDirectoryAtPath:oldDirectoryPath error:nil];

NSString *newDirectoryPath = [[oldDirectoryPath stringByDeletingLastPathComponent]stringByAppendingPathComponent:newDirectoryname];

[[NSFileManager defaultManager] createDirectoryAtPath:newDirectoryPath attributes:nil];

for (int i = 0; i < [tempArrayForContentsOfDirectory count]; i++)
{

NSString *newFilePath = [newDirectoryPath stringByAppendingPathComponent:[tempArrayForContentsOfDirectory objectAtIndex:i]];

NSString *oldFilePath = [oldDirectoryPath stringByAppendingPathComponent:[tempArrayForContentsOfDirectory objectAtIndex:i]];

NSError *error = nil;
[[NSFileManager defaultManager] moveItemAtPath:oldFilePath toPath:newFilePath error:&error];

if (error) {
 // handle error
}

}
Run Code Online (Sandbox Code Playgroud)


Ben*_*n G 5

使用moveItemAtPath应该工作.有时目录实际上并没有"重命名",而是真正移动到另一个地方.在这种情况下,还需要创建目标路径目录结构.这里使用的代码片段效果很好:

-(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);
}
Run Code Online (Sandbox Code Playgroud)