gpt4 book ai didi

ios - SSZipArchive "failed to open zip file"-- url.path 不是解决方案

转载 作者:行者123 更新时间:2023-11-28 16:05:38 24 4
gpt4 key购买 nike

编辑 2:

我尝试了来自 marmelroy ( https://github.com/marmelroy/Zip ) 的 Zip,但在 ZipArchive 创建的 zip 文件上也失败了。

然后我用 Zip 创建了另一个 zip 文件,这个文件可以很好地解压缩。

对我来说,ZipArchive 似乎有问题。我将改用 Zip,仅此而已 ...

感谢答案!!

结束编辑 2.

我需要解压缩某些文件,所以我手动安装了 SSZipArchive。将所有 3 个文件夹(SSZipArchiveminizipaes)复制到项目中,添加 #import "ZipArchive.h"在我的 bridging.h 中,所有构建都很好。

编辑:

按照推荐使用迦太基,但行为相同。

结束编辑。

我使用 Xcode 8/Swift 3

在没有解压缩任何文件的情况下进行了几次测试后,我使用 SSZipArchive 创建了自己的 zip。

    let file = "file.txt"

let text = "some text" //just a text

let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first

let path = dir?.appendingPathComponent(file)

//writing
do {
try text.write(to: path!, atomically: false, encoding: String.Encoding.utf8)
}
catch {
print("Failed writing")
}

我在这里打印()文档目录:["file.txt"]

    let zipPath = tempZipPath() //tempZipPath is taken from the SSZipArchiveExample except it uses DocumentDirectory instead of Cache...

print("zipPath: \(zipPath)")

print zipPath: /var/mobile/Containers/Data/Application/EB439A61-07B9-4910-BF28-03E85C50B292/Documents/93428A1B-E5B6-434F-B049-632B7519B126.zip

let success = SSZipArchive.createZipFile(atPath: zipPath, withContentsOfDirectory: (dir?.absoluteString)!)
if success {
print("zipped")

} else {
print(" NOT zipped")
}

同样是文档目录条目:["93428A1B-E5B6-434F-B049-632B7519B126.zip", "file.txt"]

    // this is again taken from the original Example
guard let unzipPath = tempUnzipPath() else {
return
}

print("unzipPath: \(unzipPath)")

print unzipPath: /var/mobile/Containers/Data/Application/EB439A61-07B9-4910-BF28-03E85C50B292/Documents/E4FC7DE6-F21B-46D8-9953-DCBF86E2268E

读取这个新目录的条目:[]

    let filePath = zipPath
var fileSize : UInt64 = 0

do {
let attr : NSDictionary? = try FileManager.default.attributesOfItem(atPath: filePath) as NSDictionary?

if let _attr = attr {
fileSize = _attr.fileSize();
print("fileSize: \(fileSize)")
}
} catch {
print("Error: \(error)")
}

这写成 22。我还尝试阅读工作正常的 zip 文件

从这部分开始我很绝望

    let url = URL(fileURLWithPath: zipPath)

print("url: \(url)")
print("url.path: \(url.path)")
print("url.absoluteString: \(url.absoluteString)")
print("url.absoluteURL: \(url.absoluteURL)")
print("url.absoluteURL.absoluteString: \(url.absoluteURL.absoluteString)")

这些行的输出看起来对我来说都很好:

url:file:///var/mobile/Containers/Data/Application/EB439A61-07B9-4910-BF28-03E85C50B292/Documents/93428A1B-E5B6-434F-B049-632B7519B126.zip

url.path:/var/mobile/Containers/Data/Application/EB439A61-07B9-4910-BF28-03E85C50B292/Documents/93428A1B-E5B6-434F-B049-632B7519B126.zip

url.absoluteString:file:///var/mobile/Containers/Data/Application/EB439A61-07B9-4910-BF28-03E85C50B292/Documents/93428A1B-E5B6-434F-B049-632B7519B126.zip

url.absoluteURL:file:///var/mobile/Containers/Data/Application/EB439A61-07B9-4910-BF28-03E85C50B292/Documents/93428A1B-E5B6-434F-B049-632B7519B126.zip

url.absoluteURL.absoluteString:file:///var/mobile/Containers/Data/Application/EB439A61-07B9-4910-BF28-03E85C50B292/Documents/93428A1B-E5B6-434F-B049-632B7519B126.zip

然后我尝试了所有方法(当然是字符串。不允许使用 url)

    var success2 = SSZipArchive.unzipFile(atPath: zipPath, toDestination: unzipPath)
if !success2 {
print("zipPath")
}
success2 = SSZipArchive.unzipFile(atPath: url.path, toDestination: unzipPath)
if !success2 {
print("url.path")
}
success2 = SSZipArchive.unzipFile(atPath: url.absoluteString, toDestination: unzipPath)
if !success2 {
print("url.absoluteString")
}
success2 = SSZipArchive.unzipFile(atPath: url.absoluteURL.path, toDestination: unzipPath)
if !success2 {
print("url.absoluteURL.path")
}

它打印每一行,所以它们都失败了。最后是使用 unipFileAtPath 的“长”方法。我也用 zipPath 试过这个,...所有相同的结果。

    do {
success2 = try SSZipArchive.unzipFileAtPath(url.path, toDestination: unzipPath, overwrite: true, password: nil, delegate: nil)
if !success2 {
return
}
} catch {
print("error \(error)")
print("error \(error.localizedDescription)")
}

error Error Domain=SSZipArchiveErrorDomain Code=-1 "failed to open zipfile" UserInfo={NSLocalizedDescription=failed to open zip file} errorfailed to open zip file

这里是获取路径字符串的函数。顺便提一句。我修改了 tempZipPath 所以返回一个 URL 或一个 URL.path

但是嘿:我很绝望

func tempZipPath() -> String {
var path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
path += "/\(UUID().uuidString).zip"
return path
}

func tempUnzipPath() -> String? {
var path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
path += "/\(UUID().uuidString)"
let url = URL(fileURLWithPath: path)

do {
try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)
} catch {
return nil
}

return url.path
}

有什么建议吗?是否需要考虑手动安装 SSZipArchive

提示“使用 .path 而不是 .absoluteString”对我不起作用,正如您在上面看到的那样。

绝望的tartsigam

最佳答案

我也有这个问题。如果您使用 url.path 而不是 url.absolutString,它就可以工作。感谢 vadian 的提示!

关于ios - SSZipArchive "failed to open zip file"-- url.path 不是解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40341687/

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