gpt4 book ai didi

ios - 将zip写入cacheDirectory时,iOS NSData.write(toFile)返回false

转载 作者:行者123 更新时间:2023-12-01 19:52:12 25 4
gpt4 key购买 nike

我正在尝试下载一个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!

我试过了:
  • 创建目录(已经存在)
  • 将atomic更改为false(不影响)
  • 尝试查看权限(找不到任何文档)
  • 阅读并尝试以下问题:
  • unable to write to a file in AplicationSupport directory
  • iOS: Can't save file to 'Application Support' folder, but can to 'Documents'
  • Write to file does not work

  • 我正在将Xcode v9.0 beta 2(9M137d)与iPad Air 2(iOS 11.0 15A5318g)结合使用

    最佳答案

    您需要使用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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com