仅通过更改大小写在Swift中重命名文件会出现错误:没有此类文件或目录

时间:2019-05-23 07:23:25

标签: ios swift

我想使用Swift将文件重命名为相同的文件名,只是使用不同的大小写(您可以在ios游乐场中尝试它):

filename = "NameWithCase"
newFilename = "Namewithcase"
var url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(filename)
let myText = "Some text to write to file"
try myText.write(to: url, atomically: true, encoding: .utf8)
url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(newFilename)
try myText.write(to: url, atomically: true, encoding: .utf8)

上面的代码给出了一个异常,我真的不知道如何避免:

  

Error Domain = NSCocoaErrorDomain代码= 4“文件“ Namewithcase”   不存在。” UserInfo = {NSFilePath = ..缩写。./tmp/Namewithcase,   NSUnderlyingError = 0x60000047f8d0 {Error Domain = NSPOSIXErrorDomain   代码= 2“没有这样的文件或目录”}}

如果我将新文件的文件名完全更改为Namewithcase2,则一切正常。
我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

这是MacOS(即HFS +文件系统)固有的问题,因为文件系统无法区分大小写字母。文件名不区分大小写,仅保留大小写(这意味着文件名使用正确的大小写存储)。 因此,唯一的解决方案是在另一个具有相同名称但大小写不同的保存操作之前删除文件:

try FileManager.default.removeItem(at: url)