无法将文件从 Bundle 复制到 Documents Directory 子文件夹
Failing to copy file from Bundle to Documents Directory Subfolder
我使用以下代码创建了一个 Documents Directory
子文件夹:
fileprivate func createFolderOnDocumentsDirectoryIfNotExists() {
let folderName = "HTML"
let fileManager = FileManager.default
if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
let filePath = tDocumentDirectory.appendingPathComponent("\(folderName)")
if !fileManager.fileExists(atPath: filePath.path) {
do {
try fileManager.createDirectory(atPath: filePath.path, withIntermediateDirectories: true, attributes: nil)
} catch {
print("Couldn't create document directory")
}
}
print("Document directory is \(filePath)")
}
}
这样做,子文件夹按预期创建。我通过打印 documents directory
内容来证明它显示了 HTML
folder/file
然后我试图将应用 Bundle
中存在的另一个文件复制到这个创建的子文件夹,但不知何故我收到一条错误消息,指出无法将特定文件复制到 Documents
因为已存在同名项目。
这很令人困惑,因为即使在新安装时,没有任何复制的文件,它也说该文件存在,但如果我打印子文件夹内容,则什么也没有显示。
我正在尝试使用以下代码从 bundle
沙箱复制文件:
fileprivate func copyCSSFileToHTMLFolder() {
guard let cssPath = Bundle.main.path(forResource: "swiss", ofType: ".css") else {
print("css not found -- returning")
return
}
let fileManager = FileManager.default
if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
let filePath = tDocumentDirectory.appendingPathComponent("HTML")
if fileManager.fileExists(atPath: filePath.path) {
do {
try fileManager.copyItem(atPath: cssPath, toPath: filePath.path)
} catch {
print("\nFailed to copy css to HTML folder with error:", error)
}
}
}
}
我做错了什么?
此致。
您需要创建完整路径,包括文件名。
变化:
let filePath = tDocumentDirectory.appendingPathComponent("HTML")
至:
let filePath = tDocumentDirectory.appendingPathComponent("HTML").appendingPathComponent(cssURL.lastPathComponent)
上述lastPathComponent
的使用可以通过改变:
来实现
guard let cssPath = Bundle.main.path(forResource: "swiss", ofType: ".css") else {
至:
guard let cssURL = Bundle.main.url(forResource: "swiss", withExtension: "css") else {
当然在 copyItem
的调用中使用 cssURL.path
。
我使用以下代码创建了一个 Documents Directory
子文件夹:
fileprivate func createFolderOnDocumentsDirectoryIfNotExists() {
let folderName = "HTML"
let fileManager = FileManager.default
if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
let filePath = tDocumentDirectory.appendingPathComponent("\(folderName)")
if !fileManager.fileExists(atPath: filePath.path) {
do {
try fileManager.createDirectory(atPath: filePath.path, withIntermediateDirectories: true, attributes: nil)
} catch {
print("Couldn't create document directory")
}
}
print("Document directory is \(filePath)")
}
}
这样做,子文件夹按预期创建。我通过打印 documents directory
内容来证明它显示了 HTML
folder/file
然后我试图将应用 Bundle
中存在的另一个文件复制到这个创建的子文件夹,但不知何故我收到一条错误消息,指出无法将特定文件复制到 Documents
因为已存在同名项目。
这很令人困惑,因为即使在新安装时,没有任何复制的文件,它也说该文件存在,但如果我打印子文件夹内容,则什么也没有显示。
我正在尝试使用以下代码从 bundle
沙箱复制文件:
fileprivate func copyCSSFileToHTMLFolder() {
guard let cssPath = Bundle.main.path(forResource: "swiss", ofType: ".css") else {
print("css not found -- returning")
return
}
let fileManager = FileManager.default
if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
let filePath = tDocumentDirectory.appendingPathComponent("HTML")
if fileManager.fileExists(atPath: filePath.path) {
do {
try fileManager.copyItem(atPath: cssPath, toPath: filePath.path)
} catch {
print("\nFailed to copy css to HTML folder with error:", error)
}
}
}
}
我做错了什么?
此致。
您需要创建完整路径,包括文件名。
变化:
let filePath = tDocumentDirectory.appendingPathComponent("HTML")
至:
let filePath = tDocumentDirectory.appendingPathComponent("HTML").appendingPathComponent(cssURL.lastPathComponent)
上述lastPathComponent
的使用可以通过改变:
guard let cssPath = Bundle.main.path(forResource: "swiss", ofType: ".css") else {
至:
guard let cssURL = Bundle.main.url(forResource: "swiss", withExtension: "css") else {
当然在 copyItem
的调用中使用 cssURL.path
。