Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Arhivi združujejo več datotek v en sam format, običajno zip, tar ali rar. Arhivske datoteke lahko uporabljajo tudi stiskanje za zmanjšanje skupne velikosti datoteke.

Arhive lahko uporabite za distribucijo programske opreme in podatkov, vključno s spletnimi stranmi. Svojo aplikacijo z vsemi njenimi datotekami in odvisnostmi lahko tudi arhivirate, da jo lahko uporabniki prenesejo in namestijo.

Arhivski paket Go vam omogoča ustvarjanje in ekstrahiranje arhivov v formatih tar in zip.

Gojev arhivski paket

Go zagotavlja arhiv paketi za delo z različnimi formati arhivov. Lahko uporabite zip in katran pakete za ustvarjanje, branje in pisanje arhivskih datotek v teh formatih. Oba paketa podpirata različne algoritme stiskanja prek API-ja, ki je enostaven za uporabo.

Tukaj je opisano, kako lahko uvozite pakete zip in tar v svoje datoteke Go:

uvoz (
"arhiv/zip"
"arhiv/tar"
)
instagram viewer

Po uvozu paketov jih lahko uporabite za ustvarjanje in urejanje arhivskih datotek.

Ustvarjanje in dodajanje datotek v arhive Tar

The katran paket deluje s tar arhivi formatov tar in tar.gz, vključno s podporo za branje in pisanje datotek z razširjenimi glavami PAX.

Paket tar zagotavlja a NewWriter funkcija za ustvarjanje novih arhivov tar. NewWriter sprejme an io. Pisatelj primerek vmesnika, ki je lahko datoteka ali pomnilniški medpomnilnik in vrne kazalec na katran. Pisatelj struct.

paket glavni

uvoz (
"arhiv/tar"
"os"
)

funkglavni() {
// Ustvari novo datoteko
datoteka, _ := os. Ustvari ("myarchive.tar")
odložiti mapa. Zapri()

// Ustvari nov arhiv tar
tarWriter := tar. NewWriter (datoteka)
odložiti tarWriter. Zapri()
}

The Ustvari funkcija os paket ustvari novo datoteko tar. The katran. NewWriter funkcija sprejme datoteko in ustvari nov arhiv.

Datoteke lahko dodate v arhiv tar z WriteHeader in Pišite funkcije. Funkcija WriteHeader sprejme a katran. Glava struct kot argument. Ta vsebuje metapodatke datoteke, kot so ime datoteke, velikost in bit dovoljenja. Funkcija Write zapiše vsebino datoteke v arhiv.

uvoz (
"arhiv/tar"
"fmt"
"io"
"dnevnik"
"os"
)

funkglavni() {
// Ustvari novo datoteko
datoteka, _ := os. Ustvari ("myarchive.tar")
datoteka, _ = os. Ustvari ("sporočilo.txt")
odložiti mapa. Zapri()

// Ustvari nov arhiv tar
tarWriter := tar. NewWriter (datoteka)
odložiti tarWriter. Zapri()

// Dodajanje datoteke v arhiv
fileToAdd, _ := os. Odprto("datoteka1.txt")
odložiti fileToAdd. Zapri()
fileInfo, _ := fileToAdd. Stat()
glava, _ := tar. FileInfoHeader (fileInfo, "")
tarWriter. WriteHeader (glava)
_, _ = io. Kopiraj (tarWriter, fileToAdd)
fmt. Println("Operacija arhiviranja TAR končana")
}

Program ustvari nove tar in besedilne datoteke z Ustvari funkcija os paket in nov arhiv tar z NewWriter, preden datoteko dodate v arhiv.

The Odprto funkcija odpre datoteko za dodajanje v arhiv. Upoštevajte, da boste potrebovali datoteko z imenom datoteka1.txt v vaš delovni imenik za uspešno izvajanje tega programa.

Lahko uporabite Stat funkcijo primerka datoteke za pridobivanje metapodatkov, ki jih boste potrebovali za glavo tar. Posredujte njegov rezultat FileInfoHeader, nato posredujte ta rezultat WriteHeader funkcijo za nastavitev datoteke tar. Nazadnje kopirajte datoteko v arhiv z uporabo io. Kopirati.

Ekstrahiranje datotek iz arhivov Tar

Lahko uporabite NewReader funkcija za branje vsebine arhivske datoteke tar. Funkcija NewReader sprejme an io. Bralec vmesnik, ki je lahko datoteka ali pomnilniški medpomnilnik. Vrne kazalec na a katran. Bralec struct.

uvoz (
"arhiv/tar"
"io"
"os"
)

funkglavni() {
// Odprite arhiv tar
datoteka, _ := os. Odprto("myarchive.tar")
odložiti mapa. Zapri()

// Ustvari nov bralnik tar
tarReader := tar. NewReader (datoteka)

// Iteracija po datotekah v arhivu
za {
glava, napaka := tarReader. Naslednji()

če napaka == io. EOF {
odmor
}

// Ekstrahiraj datoteko
izhodna datoteka, _ := os. Ustvari (glava. ime)
odložiti outFile. Zapri()
_, _ = io. Kopiraj (outFile, tarReader)
}
}

The neskončna zanka for prečka primerek bralnika tar in ekstrahira datoteke tako, da kopira vsako datoteko z io paketi Kopirati funkcijo.

Ustvarjanje in dodajanje datotek v arhive Zip

Nov arhiv zip lahko ustvarite z NewWriter funkcija zip paket. Funkcija NewWriter sprejme primerek datoteke in vrne zapisovalnik zip.

uvoz (
"arhiv/zip"
"os"
)

funkglavni() {
// Ustvari novo datoteko
datoteka, napaka := os. Ustvari ("arhiv.zip")

če napaka!= nič {
panika(napaka)
}

odložiti mapa. Zapri()

// Ustvari nov zapisovalnik zip
zipWriter := zip. NewWriter (datoteka)
odložiti zipWriter. Zapri()
}

The zipWriter spremenljivka shrani novo Pisatelj primerek, ki ga vrne NewWriter.

Datoteke lahko dodate v svoje arhive zip z Ustvari funkcijo primerka Writer. Funkcija Ustvari prevzame ime datoteke. Uporabite lahko tudi Pišite funkcija primerka datoteke zip za zapisovanje podatkov v datoteke v arhivih zip.

uvoz (
"arhiv/zip"
"os"
)

funkglavni() {
// Ustvari nove datoteke
datoteka, napaka := os. Ustvari ("arhiv.zip")
datoteka, napaka = os. Ustvari ("datoteka1.txt")
datoteka, napaka = os. Ustvari ("datoteka2.txt")

če napaka!= nič {
panika(napaka)
}

odložiti mapa. Zapri()

// Ustvari nov zapisovalnik zip
zipWriter := zip. NewWriter (datoteka)
odložiti zipWriter. Zapri()

// Dodajanje datotek v arhiv
datoteka1, napaka := zipWriter. Ustvari ("datoteka1.txt")

če napaka!= nič {
panika(napaka)
}

datoteka2, napaka := zipWriter. Ustvari ("datoteka2.txt")

če napaka!= nič {
panika(napaka)
}

// Zapis podatkov v datoteke v arhivu
file1.Write([]bajt("Pozdravljen, svet!"))
file2.Write([]bajt("Adijo, svet!"))
fmt. Println("operacija arhiviranja zip končana")
}

Glavna funkcija se začne z uporabo Ustvari da ustvarite novo datoteko zip in dve besedilni datoteki. Nato ustvari dva Writera za dodajanje dveh besedilnih datotek v arhiv. The Pišite funkcija vsakega primerka datoteke zapiše sporočila v vsako datoteko v arhivu.

Ekstrahiranje datotek iz arhivov Zip

Obstoječo datoteko zip lahko izvlečete tako, da jo preberete z OpenReader funkcijo, nato pa se pomikate po njeni vsebini in kopirate datoteke z io paket.

uvoz (
"arhiv/zip"
"fmt"
"io"
"os"
)

funkglavni() {
// Odpri arhiv
zipReader, napaka := zip. OpenReader("arhiv.zip")

če napaka!= nič {
panika(napaka)
}

odložiti zipReader. Zapri()

// Ekstrahiraj datoteke iz arhiva
za _, datoteka := obseg zipReader. Mapa {
stisnjena datoteka, napaka := datoteka. Odprto()

če napaka!= nič {
panika(napaka)
}

odložiti zipFile. Zapri()

// Ustvarite novo datoteko z enakim imenom kot stisnjena datoteka
izvlečena datoteka, napaka := os. Ustvari (datoteka. ime)

če napaka!= nič {
panika(napaka)
}

odložiti izvlečena datoteka. Zapri()

// Kopirajte podatke iz stisnjene datoteke v novo datoteko
_, napaka = io. Kopiraj (izvlečena datoteka, stisnjena datoteka)

če napaka!= nič {
panika(napaka)
}

fmt. Printf("Izvleček %s\n", mapa. ime)
}
}

The OpenReader funkcija bere zip arhive. The OpenReader funkcija sprejme ime datoteke zip kot argument in vrne primerek bralnika datoteke zip. The za-razpon zanka prečka vsebino datotek v primerku bralnika. Ustvari novo datoteko z enakim imenom kot izvirna datoteka in prekopira vsebino ekstrahirane datoteke v novo datoteko z uporabo io. Kopirati funkcijo.

Razpakirajte ročno ali programsko - odvisno je od vas

Programsko razpakiranje datotek je priročno, če imate veliko datotek ali arhivov za razpakiranje. Morda boste v svojo glavno aplikacijo integrirali tudi funkcijo arhiviranja.

V drugih primerih je morda bolje, če uporabite obstoječe aplikacije. Za razpakiranje arhivov v sistemih Windows, macOS in Linux lahko uporabite vgrajene aplikacije ali aplikacije drugih proizvajalcev.