gpt4 book ai didi

iphone - 重命名文档目录的文件夹

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:09:11 26 4
gpt4 key购买 nike

这可能很简单,但我没有遇到问题。
我正在使用下面的代码重命名文档目录的文件夹,除了一种情况外工作正常。

    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
}


现在,我的问题是,如果 有一个名为“A”(大写字母 A)的文件夹,我将其重命名为“a”(小写字母 a),那么它无法正常工作,并且给出错误。
我没有找到问题所在。

最佳答案

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

文件管理器 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模拟器上,不会出现在设备上,因为设备文件系统区分大小写

swift :

let result = oldURL.withUnsafeFileSystemRepresentation { oldPath in
newURL.withUnsafeFileSystemRepresentation { newPath in
rename(oldPath, newPath)
}
}
if result != 0 {
NSLog("%s", strerror(errno))
}

关于iphone - 重命名文档目录的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18286351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com