这可能很容易,但我没有遇到问题。
我使用下面的代码重命名文档目录的文件夹,除了一个案例外,工作正常。
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.
我没有得到问题所在。
答案 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模拟器上,而不是在设备上,因为 设备文件系统区分大小写。