Esistono classi Objective-C equivalenti a quelle contenute nel pacchetto Java java.util.zip
?
È possibile eseguire un comando CLI l'unica alternativa?Creazione di un archivio ZIP da un'applicazione Cocoa
risposta
A partire da iOS8/OSX10.10 esiste un modo integrato per creare archivi zip utilizzando NSFileCoordinatorReadingOptions.ForUploading
. Un semplice esempio di creare archivi zip senza dipendenze non cacao:
public extension NSURL {
/// Creates a zip archive of the file/folder represented by this URL and returns a references to the zipped file
///
/// - parameter dest: the destination URL; if nil, the destination will be this URL with ".zip" appended
func zip(dest: NSURL? = nil) throws -> NSURL {
let destURL = dest ?? self.URLByAppendingPathExtension("zip")
let fm = NSFileManager.defaultManager()
var isDir: ObjCBool = false
let srcDir: NSURL
let srcDirIsTemporary: Bool
if let path = self.path where self.fileURL && fm.fileExistsAtPath(path, isDirectory: &isDir) && isDir.boolValue == true {
// this URL is a directory: just zip it in-place
srcDir = self
srcDirIsTemporary = false
} else {
// otherwise we need to copy the simple file to a temporary directory in order for
// NSFileCoordinatorReadingOptions.ForUploading to actually zip it up
srcDir = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent(NSUUID().UUIDString)
try fm.createDirectoryAtURL(srcDir, withIntermediateDirectories: true, attributes: nil)
let tmpURL = srcDir.URLByAppendingPathComponent(self.lastPathComponent ?? "file")
try fm.copyItemAtURL(self, toURL: tmpURL)
srcDirIsTemporary = true
}
let coord = NSFileCoordinator()
var error: NSError?
// coordinateReadingItemAtURL is invoked synchronously, but the passed in zippedURL is only valid
// for the duration of the block, so it needs to be copied out
coord.coordinateReadingItemAtURL(srcDir, options: NSFileCoordinatorReadingOptions.ForUploading, error: &error) { (zippedURL: NSURL) -> Void in
do {
try fm.copyItemAtURL(zippedURL, toURL: destURL)
} catch let err {
error = err as NSError
}
}
if srcDirIsTemporary { try fm.removeItemAtURL(srcDir) }
if let error = error { throw error }
return destURL
}
}
public extension NSData {
/// Creates a zip archive of this data via a temporary file and returns the zipped contents
func zip() throws -> NSData {
let tmpURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent(NSUUID().UUIDString)
try self.writeToURL(tmpURL, options: NSDataWritingOptions.DataWritingAtomic)
let zipURL = try tmpURL.zip()
let fm = NSFileManager.defaultManager()
let zippedData = try NSData(contentsOfURL: zipURL, options: NSDataReadingOptions())
try fm.removeItemAtURL(tmpURL) // clean up
try fm.removeItemAtURL(zipURL)
return zippedData
}
}
C'è una zip-quadro, http://code.google.com/p/zip-framework/, ma sembra di essere in un (versione 0.1) fase iniziale.
Altre risposte su cocoadev: http://cocoadev.com/ZipArchiveLibraryForCocoa
Una risposta da lì: ZipKit, https://github.com/kolpanic/ZipKit
ZipKit sembra denominare meglio i suoi metodi di ZipArchive (anche se non capisco il motivo per cui prefissi i suoi metodi di addizione). – kiamlaluno
I metodi di prefisso o suffisso della categoria aiutano a evitare conflitti di nome se Apple aggiunge un metodo in Cocoa con lo stesso nome. –
ZipKit è ora disponibile all'indirizzo https://github.com/kolpanic/ZipKit e non più su bitbucket (shock) – uchuugaka
Scopri http://code.google.com/p/ziparchive/. È una classe per zippare i file. Google è tuo amico!
Oltre a leggere e scrivere archivi zip nel proprio processo, non c'è motivo di vergognarsi nell'usare NSTask per eseguire zip
e unzip
.
L'utilizzo di questo metodo consente di non modificare il codice per supportare nuove funzionalità. Mi chiedo che cosa esattamente Finder quando si seleziona un file/directory e quindi selezionare "Comprimi" dal menu. Quale eseguibile utilizza Finder? – kiamlaluno
Utilizza l'utilità di archiviazione. –
Partenza zipzap, il mio digiuno file zip libreria di I/O.
- 1. Creazione archivio zip in Java
- 2. Creazione di un archivio zip della directory "target" di prova
- 3. Creazione di un archivio zip autoestraente su una macchina Linux
- 4. Compressione di archivio zip
- 5. Lettura di file da un archivio ZIP incorporato
- 6. Creazione di un archivio zip da una cartella e conservazione della struttura con Node.js
- 7. Ionic Zip: creazione file zip da byte []
- 8. Shiny: scaricare archivio zip
- 9. Come escludere le cartelle .svn da un archivio ZIP?
- 10. Creare un archivio ZIP con Maven
- 11. Come posso estrarre un singolo file da un archivio ZIP usando Perl's Archive :: Zip?
- 12. Creazione di file zip da cartelle
- 13. Come creare un archivio zip usando Ruby on Rails?
- 14. Creazione di file .zip
- 15. Creazione di file zip da un flusso di memoria C#
- 16. Creazione di file Excel (.xlsx) in Cocoa
- 17. Estrarre un file specifico da un archivio zip senza mantenere la struttura delle directory in python
- 18. Leggi le righe da un file all'interno di un archivio zip usando il conduit zip di Haskell
- 19. Attività gradle per creare un archivio zip di una directory
- 20. Non in grado di creare un archivio Zip in Gradle
- 21. Crea archivio zip per download immediato
- 22. Creazione di un file di archivio chiavi con un comando
- 23. In memoria scarica ed estrai archivio zip
- 24. Come posso creare un archivio Zip in Perl?
- 25. Come posso scrivere file XML direttamente in un archivio zip?
- 26. Archivio zip: posso rinominare o spostare un oggetto ZipArchiveEntry?
- 27. Estrazione di file da un archivio Zip utilizzando C# e System.IO.Packaging
- 28. Ottenere un "Impossibile leggere come file zip" Eccezione durante il tentativo di ottenere un flusso da un file zip interno (un Zip all'interno di un altro zip)
- 29. Come si installa manualmente il plugin eclipse-CDT da un archivio/zip su ubuntu?
- 30. Come si scarica Symfony Distribution come archivio Zip?
Questo è grandioso, ma per quanto riguarda il contrario? Cioè, avendo un file zip e quindi leggendo il suo contenuto come se fosse una directory? – adib
Ho cercato ma non ho trovato alcun metodo simile per andare al contrario. Ho votato questa risposta perché è sorprendente. Tuttavia, nella mia app Mac, ho invece usato NSTask per richiamare/usr/bin/zip e/usr/bin/unzip. È semplice, offre molte * opzioni * documentate per controllare il comportamento, e nel mio caso ha preso meno codice di questo. –