Распакуйте zip-файл, сохраненный в приложении в xcode с помощью swift 5.0. - PullRequest
0 голосов
/ 17 апреля 2020

Я сохранил один zip-файл в своем приложении, в котором *. 1025 * файлов. Мне нужно распаковать этот zip-файл по какому-то пути и прочитать файл после распаковки.

Я пытался использовать менеджеры пакетов, такие как ZipFoundation

Если я запускаю приложение на своей ма c с ОС 10.15.2 (macOS Catalina) Я получаю следующий вывод

"Extraction of ZIP archive failed with error:Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “directory” in the folder “Macintosh HD”." UserInfo={NSFilePath=/directory, NSUnderlyingError=0x600002f39530 {Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied"}}"

, если я запускаю приложение на устройстве (iPhone XS Max iOS 13.3.1), я получаю следующее ошибка,

Extraction of ZIP archive failed with error:Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “directory” in the folder “System@snap-8290536”." UserInfo={NSFilePath=/directory, NSUnderlyingError=0x2811d54d0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

Это мой код

import ZIPFoundation


func unarchiveFile(){
    let fileManager = FileManager()
    let currentWorkingPath = fileManager.currentDirectoryPath
    var sourceURL = URL(fileURLWithPath: "/Users/sagarchavan/Documents/Project/Swift-POC/iOS-CD-POCs/CDSwiftDemo/")
    //var sourceURL = URL(fileURLWithPath:currentWorkingPath)
    sourceURL.appendPathComponent("countryList.zip")
    print("source url is :- :\(sourceURL)")
    var destinationURL = URL(fileURLWithPath: currentWorkingPath)
    destinationURL.appendPathComponent("directory")
    print("destinationURL is :- :\(destinationURL)")
    do {
        try fileManager.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil)
        try fileManager.unzipItem(at: sourceURL, to: destinationURL)
    } catch {
        print("Extraction of ZIP archive failed with error:\(error)")
    }
}

Не могли бы вы помочь мне выйти из этой проблемы. Мне нужно распаковать zip-файл.

для sourceURL Я попробовал оба варианта, указав currentWorkingPath и указав фактический путь к файлу. но оба раза я получаю одну и ту же ошибку.

@ note: - Я не хочу использовать стручки или Карфаген. Я хочу, чтобы код по умолчанию или внешние зависимости были только от менеджеров пакетов.

Любая помощь будет оценена. Спасибо.

1 Ответ

0 голосов
/ 17 апреля 2020

Все Благодаря @vadian я использовал URL(fileURLWithPath: currentWorkingPath)

Вот мой пример кода, который работает хорошо сейчас,

func unarchiveFile(){
        let fileManager = FileManager()
        let currentWorkingPath = "/Users/sagarchavan/Documents/Project/Swift-POC/iOS-CD-POCs/CDSwiftDemo/CDSwiftDemo/Zipfile/"
        var sourceURL = URL(fileURLWithPath:currentWorkingPath)
        sourceURL.appendPathComponent("countryList.zip")
        var destinationURL = URL(fileURLWithPath: currentWorkingPath)
        destinationURL.appendPathComponent("unzipData")
        do {
            try fileManager.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil)
            try fileManager.unzipItem(at: sourceURL, to: destinationURL)
           parseJSONFromFile(destinationPath: destinationURL)
        } catch {
            print("Extraction of ZIP archive failed with error:\(error)")
        }
    }
...