Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

Arkiver samler flere filer i ett enkelt format, vanligvis zip, tar eller rar. Arkivfiler kan også bruke komprimering for å redusere den totale filstørrelsen.

Du kan bruke arkiver til å distribuere programvare og data, inkludert nettsider. Du kan også arkivere applikasjonen din, med alle dens filer og avhengigheter, slik at brukere kan laste ned og installere.

Go’s arkivpakke lar deg lage og trekke ut arkiver i tar- og zip-formater.

Go’s arkivpakke

Go gir arkiv pakker for arbeid med ulike arkivformater. Du kan bruke glidelås og tjære pakker for å lage, lese og skrive arkivfiler i disse formatene. Begge pakkene støtter ulike komprimeringsalgoritmer over en brukervennlig API.

Slik kan du importere zip- og tar-pakkene i Go-filene dine:

import (
"arkiv/zip"
"arkiv/tjære"
)

Etter å ha importert pakkene, kan du bruke dem til å lage og manipulere arkivfiler.

instagram viewer

Opprette og legge til filer i Tar-arkiver

De tjære pakken fungerer med tjære arkiver av tar- og tar.gz-formater, inkludert støtte for lesing og skriving av filer med PAX utvidede overskrifter.

Tjærepakken gir en NewWriter funksjon for å lage nye tar-arkiver. NewWriter tar inn en io. Forfatter grensesnittforekomst som kan være en fil eller minnebuffer og returnerer en peker til tjære. Forfatter struktur.

pakke hoved-

import (
"arkiv/tjære"
"os"
)

funchoved-() {
// Opprett en ny fil
fil, _ := os. Skape("myarchive.tar")
utsette fil. Lukk()

// Opprett et nytt tar-arkiv
tarWriter := tar. NewWriter (fil)
utsette tarWriter. Lukk()
}

De Skape funksjonen til os pakken oppretter en ny tar-fil. De tjære. NewWriter funksjonen tar inn en fil og oppretter et nytt arkiv.

Du kan legge til filer i tar-arkivet med WriteHeader og Skrive funksjoner. WriteHeader-funksjonen tar en tjære. Overskrift struktur som argument. Dette inneholder filens metadata, for eksempel filnavn, størrelse og tillatelsesbiter. Skrivefunksjonen skriver innholdet i en fil til arkivet.

import (
"arkiv/tjære"
"fmt"
"io"
"Logg"
"os"
)

funchoved-() {
// Opprett en ny fil
fil, _ := os. Skape("myarchive.tar")
fil, _ = os. Skape("melding.txt")
utsette fil. Lukk()

// Opprett et nytt tar-arkiv
tarWriter := tar. NewWriter (fil)
utsette tarWriter. Lukk()

// Legg til en fil i arkivet
fileToAdd, _ := os. Åpen("fil1.txt")
utsette fileToAdd. Lukk()
fileInfo, _ := fileToAdd. Stat()
overskrift, _ := tar. FileInfoHeader (fileInfo, "")
tarWriter. WriteHeader (header)
_, _ = io. Kopier (tarWriter, fileToAdd)
fmt. Println("TAR-arkivoperasjon fullført")
}

Programmet lager nye tar- og tekstfiler med Skape funksjonen til os pakke og et nytt tjærearkiv med NewWriter, før du legger til filen i arkivet.

De Åpen funksjonen åpner filen for å legge til i arkivet. Merk at du trenger en fil som heter fil1.txt i arbeidskatalogen for å kjøre dette programmet vellykket.

Du kan bruke Stat funksjonen til en filforekomst for å hente metadataene du trenger for tar-overskriften. Send resultatet til FileInfoHeader, send deretter resultatet til WriteHeader funksjon for å sette opp tar-filen. Til slutt kopierer du filen til arkivet ved hjelp av io. Kopiere.

Trekker ut filer fra Tar-arkiver

Du kan bruke NewReader funksjon for å lese innholdet i tar-arkivfilen. NewReader-funksjonen tar inn en io. Leser grensesnitt som kan være en fil eller en minnebuffer. Den returnerer en peker til en tjære. Leser struktur.

import (
"arkiv/tjære"
"io"
"os"
)

funchoved-() {
// Åpne tar-arkivet
fil, _ := os. Åpen("myarchive.tar")
utsette fil. Lukk()

// Opprett en ny tar-leser
tarReader := tar. NewReader (fil)

// Iterer over filene i arkivet
til {
header, feil := tarReader. Neste()

hvis feil == io. EOF {
gå i stykker
}

// Pakk ut filen
utfil, _ := os. Opprett (overskrift. Navn)
utsette utfil. Lukk()
_, _ = io. Kopier (outFile, tarReader)
}
}

De uendelig for loop krysser tar-leserforekomsten og trekker ut filene ved å kopiere hver fil med io pakkens Kopiere funksjon.

Opprette og legge til filer i zip-arkiver

Du kan opprette et nytt zip-arkiv med NewWriter funksjonen til glidelås pakke. NewWriter-funksjonen tar inn en filforekomst og returnerer en zip-skriver.

import (
"arkiv/zip"
"os"
)

funchoved-() {
// Opprett en ny fil
fil, feil := os. Skape("archive.zip")

hvis feil!= null {
panikk(feil)
}

utsette fil. Lukk()

// Opprett en ny zip-skriver
zipWriter := zip. NewWriter (fil)
utsette zipWriter. Lukk()
}

De zipWriter variabel lagrer en ny Forfatter forekomst som NewWriter returnerer.

Du kan legge til filer i zip-arkivene dine med Skape funksjonen til Writer-forekomsten. Opprett-funksjonen tar inn filnavnet. Du kan også bruke Skrive funksjonen til zip-filforekomsten for å skrive data til filer i zip-arkiver.

import (
"arkiv/zip"
"os"
)

funchoved-() {
// Opprett nye filer
fil, feil := os. Skape("archive.zip")
fil, err = os. Skape("fil1.txt")
fil, err = os. Skape("fil2.txt")

hvis feil!= null {
panikk(feil)
}

utsette fil. Lukk()

// Opprett en ny zip-skriver
zipWriter := zip. NewWriter (fil)
utsette zipWriter. Lukk()

// Legg til filer i arkivet
fil1, feil := zipWriter. Skape("fil1.txt")

hvis feil!= null {
panikk(feil)
}

fil2, feil := zipWriter. Skape("fil2.txt")

hvis feil!= null {
panikk(feil)
}

// Skriv data til filene i arkivet
fil1.Skriv([]byte("Hei Verden!"))
fil2.Skriv([]byte("Farvel, verden!"))
fmt. Println("zip-arkiveringsoperasjon fullført")
}

Hovedfunksjonen starter med å bruke Skape for å lage en ny zip-fil og to tekstfiler. Den oppretter deretter to forfattere for å legge til de to tekstfilene i arkivet. De Skrive funksjonen til hver filforekomst skriver meldinger til hver av filene i arkivet.

Trekker ut filer fra zip-arkiver

Du kan pakke ut en eksisterende zip-fil ved å lese den med OpenReader funksjonen, for deretter å gå gjennom innholdet og kopiere filer med io pakke.

import (
"arkiv/zip"
"fmt"
"io"
"os"
)

funchoved-() {
// Åpne arkivet
zipReader, feil := zip. OpenReader("archive.zip")

hvis feil!= null {
panikk(feil)
}

utsette zipReader. Lukk()

// Pakk ut filer fra arkivet
til _, fil := område zipReader. Fil {
zippedFile, feil := fil. Åpen()

hvis feil!= null {
panikk(feil)
}

utsette zippede fil. Lukk()

// Lag en ny fil med samme navn som den zippede filen
extractedFile, feil := os. Opprett (fil. Navn)

hvis feil!= null {
panikk(feil)
}

utsette uttrukket fil. Lukk()

// Kopier dataene fra den zippede filen til den nye filen
_, feil = io. Kopi (extractedFile, zippedFile)

hvis feil!= null {
panikk(feil)
}

fmt. Printf("Pakket ut %s\n", fil. Navn)
}
}

De OpenReader funksjonen leser zip-arkiver. De OpenReader funksjonen aksepterer zip-filnavnet som et argument og returnerer en zip-filleserforekomst. De for rekkevidde loop går gjennom innholdet i filene i leserforekomsten. Den oppretter en ny fil med samme navn som den opprinnelige filen, og kopierer innholdet i den utpakkede filen til den nye filen ved å bruke io. Kopiere funksjon.

Pakk ut manuelt eller programmert – det er opp til deg

Å pakke ut filer programmatisk er praktisk hvis du har mange filer eller arkiver å pakke ut. Du kan også integrere arkivfunksjonalitet i hovedappen din.

I andre tilfeller kan det være bedre å bruke eksisterende applikasjoner. Du kan bruke innebygde apper eller tredjepartsapper til å pakke ut arkiver på Windows, macOS og Linux.