作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试下载一个zip文件,然后在解压缩之前将其写入cacheDirectory。但是,write(toFile :)始终返回false:
import Foundation
func downloadFile(url: URL, completion: @escaping (Result<Data>) -> Void) {
print("starting dqueue to download " + url.absoluteString)
DispatchQueue.global(qos: .background).async {
print("Starting download")
let data = NSData.init(contentsOf: url)
if data == nil {
print("Data nil!")
}
// Find cache
print("Got data!")
let paths = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)
let path = paths[0]
let dataPath = URL(fileURLWithPath: path).appendingPathComponent("mod.zip")
if (FileManager.default.fileExists(atPath: dataPath.absoluteString)) {
print("File already exists!")
}
// Save data
print("Saving to " + dataPath.absoluteString)
if (data?.write(toFile: dataPath.absoluteString, atomically: true) ?? false) {
if (FileManager.default.fileExists(atPath: dataPath.absoluteString)) {
print("exists!")
} else {
print("does not exist!")
}
if (FileManager.default.isWritableFile(atPath: dataPath.absoluteString)) {
print("Writable")
}else {
print("Not Writable")
}
DispatchQueue.main.async {
print("This is run on the main queue, after the previous code in outer block")
}
} else {
print("Failed to write to file!")
}
}
}
starting dqueue to download https://github.com/minetest-mods/armor_monoid/archive/c7988a3dae32f2c1cb93fde31d9e53222a205eea.zip
Starting download
Got data!
Saving to file:///var/mobile/Containers/Data/Application/E734C574-1E94-44CB-9A6E-2AE1C8850E88/Library/Caches/mod.zip
Failed to write to file!
最佳答案
您需要使用relativePath
而不是absoluteString
。
试试这个(我尝试过,它起作用了):
import Foundation
func downloadFile(url: URL, completion: @escaping (Result<Data>) -> Void) {
print("starting dqueue to download " + url.absoluteString)
DispatchQueue.global(qos: .background).async {
print("Starting download")
let data = NSData.init(contentsOf: url)
if data == nil {
print("Data nil!")
}
// Find cache
print("Got data!")
let paths = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)
let path = paths[0]
let dataPath = URL(fileURLWithPath: path).appendingPathComponent("mod.zip")
if (FileManager.default.fileExists(atPath: dataPath.relativePath)) {
print("File already exists!")
}
// Save data
print("Saving to " + dataPath.relativePath)
if (data?.write(toFile: dataPath.relativePath, atomically: true) ?? false) {
if (FileManager.default.fileExists(atPath: dataPath.relativePath)) {
print("exists!")
} else {
print("does not exist!")
}
if (FileManager.default.isWritableFile(atPath: dataPath.relativePath)) {
print("Writable")
}else {
print("Not Writable")
}
DispatchQueue.main.async {
print("This is run on the main queue, after the previous code in outer block")
}
} else {
print("Failed to write to file!")
}
}
}
关于ios - 将zip写入cacheDirectory时,iOS NSData.write(toFile)返回false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45101577/
我的问题:我在缓存目录中有我的 SQLite 数据库文件,并将 isExcludedFromBackup 设置为 true 因为我读到,这样做会防止 iOS 系统在存储空间满的情况下删除它。但它仍然被
我试过了: { "env": { "development": { "option": { "cacheDirector
在 sbt 邮件列表上问过这个问题,但显然是 phased out 我创建了一个 project on github从吹走工件更新缓存目录中解决“sbt> clean”问题。 在 0.12.4 上运行
我想把 NSArray 的 Class 放到 cacheDirectory 中。我写如下,但它返回 false。你能告诉我如何解决这个问题吗?谢谢你的好意。 let paths2 = NSSearch
我是一名优秀的程序员,十分优秀!