我已经阅读了一些类似问题的答案,并且每次问题都在保存绝对路径时,而不是每次都仅保存文件名并重新创建url时。我尝试遵循在这些答案中看到的代码示例,但结果是相同的:“因为没有这样的文件或目录,所以无法从文件读取”。我肯定在某个地方搞砸了,会有所帮助的 写作:
let dir = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)[0]
let accountDir = dir.appendingPathComponent("\(self.getHexString(str: self.account))", isDirectory: true)
let imageUrl = accountDir.appendingPathComponent("\(self.path.rawValue)")
if let imageData = UIImagePNGRepresentation(image) {
FileManager().createFile(atPath: imageUrl.path, contents: imageData, attributes: nil)
}
阅读:
let dir = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)[0]
let accountDir = dir.appendingPathComponent("\(self.getHexString(str: self.account))", isDirectory: true)
let imageUrl = accountDir.appendingPathComponent("\(self.path.rawValue)")
let imageData = try Data(contentsOf: imageUrl)
答案 0 :(得分:0)
有两个原因:
它没有正确创建路径。
尝试将image.path
更改为image.absoluteString
我认为这只是在创建文件,而不是在其中写入任何内容
在createfile之后尝试以下代码:
let file = try FileHandle(forUpdating: imageUrl)
file.seekToEndOfFile()
file.write(data: imageData)
file.closeFile()
答案 1 :(得分:0)
我认为我将图像存储到的目录是在将其附加到路径和标志isDirectory: true
后自动创建的,但是没有。所以正确的代码是:
let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let accountDir = dir.appendingPathComponent("\(self.getHexString(str: self.account))", isDirectory: true)
let isDirectoryExists = FileManager.default.fileExists(atPath: accountDir.path)
if !isDirectoryExists {
do {
try FileManager.default.createDirectory(atPath: accountDir.path, withIntermediateDirectories: false, attributes: nil)
} catch(let error) {
print(error)
}
}
let imageUrl = accountDir.appendingPathComponent("\(self.path.rawValue)")
if let imageData = UIImagePNGRepresentation(image) {
FileManager().createFile(atPath: imageUrl.path, contents: imageData, attributes: nil)
}