我必须重命名文档目录中的一些文件。我正在尝试使用URLResourceValues:
let fileURLs = try! FileManager.default.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil)
fileURLS.forEach { fileURL in
// calculate newFileName
var resourceValues = URLResourceValues()
resourceValues.name = newFilename
var mutableFileURL = fileURL
try! mutableFileURL.setResourceValues(resourceValues)
}
设置resourceValues.name
后,我在控制台中看到以下内容...
key NSMutableString "NSURLNameKey" 0x00000001e7a8a368
value NSString "newName.jpg" 0x0000000283f61fe0
所以这部分是工作的。try!
完成而没有崩溃,所以没有抛出错误。但是mutableFileURL
没有改变。它使用旧名称,而不是新名称。
我在文档中看到设置只读属性或设置不支持的属性将被忽略,并且不会抛出错误。但在我的研究中,我看到这种方法通常用于重命名文件。我不认为这是一个写权限的事情,因为如果我使用旧的方法,它工作得很好:
try! FileManager.default.moveItem(at: fileURL, to: newFileURL)
我能错过什么呢?
P.S.应用程序面向iOS 14,在运行iOS 16.1的真实的设备上运行
1条答案
按热度按时间0aydgbwb1#
你还没有表现出你是如何知道事情不起作用的,但你说:
但
mutableFileURL
不变你的代码不应该改变
mutableFileURL
,如果你想看看mutableFileURL
发生了什么,那就是问题所在。这里的URL只是一个指向磁盘上文件的指针,这就是
setResourceValues
方法的全部意义,你的代码改变了磁盘上文件的名称(指针mutableFileURL
现在是无效的,应该被丢弃)。如果您 * 重新获取documents目录的内容,* 您将看到您的代码工作得很好。