无法将文件保存到 ios swift 中的本地存储
Unable to save file to local storage in ios swift
我正在尝试从服务器下载文件内容,在客户端创建一个文件并将所有内容传输到该文件。我正在将文件保存到本地存储,但无法保存并抛出您无权保存在文件夹中的异常。尝试了很多东西,但无法做到。我对这个 ios 编程很陌生。请帮助我,提前致谢。
下面是我的代码:
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
var fileURL : URL = URL(fileURLWithPath: documentsUrl!.path+filename)
fileURL = URL(fileURLWithPath: documentsUrl!.path+filename+".doc")
let data = NSData(contentsOf: tempLocalUrl)
do {
try data?.write(to: fileURL, options: .atomic)
} catch {
print(error,"helooooooooooooooooo")
}
我已经使用了相对路径、绝对字符串,但仍然没有成功。
这是错误:
Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “DocumentsImport From IE.doc” in the folder “0103E60B-478F-475B-A8F2-788534F5D206”." UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/DocumentsImport From IE.doc, NSUnderlyingError=0x1076efe90 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
你在错误中的路径是:
/var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/DocumentsImport From IE.doc
而不是:
/var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/Documents/Import From IE.doc
并使用 appendingPathComponent 连接路径元素。
永远不要构建像
这样的路径
documentsUrl!.path+filename+".doc"
不要那样做。你可能会忘记你实际使用的路径分隔符。
URL 提供专用 API 来构建路径
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentsUrl.appendingPathComponent(filename).appendingPathExtension("doc")
do {
let data = try Data(contentsOf: tempLocalUrl) // not NSData !!
try data.write(to: fileURL, options: .atomic)
} catch {
print(error,"helooooooooooooooooo")
}
我这样保存我的图像
let fileManager = FileManager.default
do {
let documentDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
let fileURL = documentDirectory.appendingPathComponent(name)
let image = #imageLiteral(resourceName: "Notifications")if let imageData = UIImageJPEGRepresentation(image, 0.5) {
try imageData.write(to: fileURL)
return true
}
} catch {
print(error)
}
我正在尝试从服务器下载文件内容,在客户端创建一个文件并将所有内容传输到该文件。我正在将文件保存到本地存储,但无法保存并抛出您无权保存在文件夹中的异常。尝试了很多东西,但无法做到。我对这个 ios 编程很陌生。请帮助我,提前致谢。
下面是我的代码:
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
var fileURL : URL = URL(fileURLWithPath: documentsUrl!.path+filename)
fileURL = URL(fileURLWithPath: documentsUrl!.path+filename+".doc")
let data = NSData(contentsOf: tempLocalUrl)
do {
try data?.write(to: fileURL, options: .atomic)
} catch {
print(error,"helooooooooooooooooo")
}
我已经使用了相对路径、绝对字符串,但仍然没有成功。
这是错误:
Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “DocumentsImport From IE.doc” in the folder “0103E60B-478F-475B-A8F2-788534F5D206”." UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/DocumentsImport From IE.doc, NSUnderlyingError=0x1076efe90 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
你在错误中的路径是:
/var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/DocumentsImport From IE.doc
而不是:
/var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/Documents/Import From IE.doc
并使用 appendingPathComponent 连接路径元素。
永远不要构建像
这样的路径documentsUrl!.path+filename+".doc"
不要那样做。你可能会忘记你实际使用的路径分隔符。
URL 提供专用 API 来构建路径
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentsUrl.appendingPathComponent(filename).appendingPathExtension("doc")
do {
let data = try Data(contentsOf: tempLocalUrl) // not NSData !!
try data.write(to: fileURL, options: .atomic)
} catch {
print(error,"helooooooooooooooooo")
}
我这样保存我的图像
let fileManager = FileManager.default
do {
let documentDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
let fileURL = documentDirectory.appendingPathComponent(name)
let image = #imageLiteral(resourceName: "Notifications")if let imageData = UIImageJPEGRepresentation(image, 0.5) {
try imageData.write(to: fileURL)
return true
}
} catch {
print(error)
}