重命名文档目录的文件夹

时间:2013-08-17 07:35:27

标签: iphone ios

这可能很容易,但我没有遇到问题。
我使用下面的代码重命名文档目录的文件夹,除了一个案例外,工作正常。

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
    NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Photos"];
    NSArray * arrAllItems = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dataPath error:NULL]; // List of all items
    NSString *filePath = [dataPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", [arrAllItems objectAtIndex:tagSelected]]];

    NSString *newDirectoryName = txtAlbumName.text; // Name entered by user
    NSString *oldPath = filePath;
    NSString *newPath = [[oldPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:newDirectoryName];
    NSError *error = nil;
    [[NSFileManager defaultManager] moveItemAtPath:oldPath toPath:newPath error:&error];
    if (error) {
        NSLog(@"%@",error.localizedDescription);
        // handle error
    }


现在,我的问题是如果there is a folder named "A"(capital letter A) and I am renaming it to "a" (small letter a), then it is not working and giving an error.我没有得到问题所在。

1 个答案:

答案 0 :(得分:3)

HFS +文件系统(在OS X上)不区分大小写,但大小写保留。 这意味着如果你创建一个文件夹“A”,然后检查是否有一个文件夹“a”,你就会得到 “是”作为答案。

文件管理器moveItemAtPath:toPath:...首先检查目标路径是否已经存在 存在,因此失败

NSUnderlyingError=0x7126dc0 "The operation couldn’t be completed. File exists"

一种解决方法是首先将目录重命名为一些完全不同的名称:

A --> temporary name --> a

但更简单的解决方案是使用BSD rename()系统调用,因为那样 可以毫无问题地将“A”重命名为“a”:

if (rename([oldPath fileSystemRepresentation], [newPath fileSystemRepresentation]) == -1) {
    NSLog(@"%s",strerror(errno));
}

请注意,问题仅出现在iOS模拟器上,而不是在设备上,因为 设备文件系统区分大小写