因此,我试图在我的应用程序中重命名一个文件夹,但moveItem方法的行为很奇怪。下面是我的代码:
try FileManager.default.moveItem(at: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("parentFolder").appendingPathComponent("folderIWantToMove"), to: FileManager.default.urls(for: .applicationDirectory, in: .userDomainMask)[0].appendingPathComponent("parentFolder").appendingPathComponent("newFolderName"))
此操作失败,调试器中的消息为:
“folderIWantToMove” couldn’t be moved to “parentFolder” because either the former doesn’t exist, or the folder containing the latter doesn’t exist.
但是当我在lldb中运行这段代码时:
print FileManager.default.fileExists(atPath: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("parentFolder").appendingPathComponent("folderIWantToMove").path)
和
print FileManager.default.fileExists(atPath: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("parentFolder").path)
两者都返回true,这意味着两个文件夹都存在。我读过其他一些类似问题的问题,他们中的大多数人说这是因为沙箱。如果是这种情况,我如何才能更改和删除用户文档目录中的文件的名称?
以防万一,我用的是swift 5,在iPad上运行所有的东西,iPadOS 13来自Xcode12测试版。
发布于 2020-11-16 04:31:20
问题是你没有重命名它,你试图将你的目录从你的documents目录中移到你捆绑包之外的应用程序目录中,并且无法从iOS中的应用程序中访问。
let document = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let parentFolder = document.appendingPathComponent("parentFolder")
let folderIWantToMove = parentFolder.appendingPathComponent("folderIWantToMove")
do {
try FileManager.default.createDirectory(at: folderIWantToMove, withIntermediateDirectories: true, attributes: nil)
print("folder and sub folder created")
print("folderIWantToMove path:", folderIWantToMove.path)
// renaming it
let newFolderName = parentFolder.appendingPathComponent("newFolderName")
try FileManager.default.moveItem(at: folderIWantToMove, to: newFolderName)
print("folder renamed to:", newFolderName.path)
} catch {
print(error)
}
发布于 2020-11-16 03:32:24
我也遇到过同样的文件问题,但在macOS上。我通过添加"com.apple.security.files.user-selected.read-write“授权并将其设置为true来修复它。我希望这能帮到你!(另外,请确保将应用程序沙箱授权设置为false)
https://stackoverflow.com/questions/64851902
复制