Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

Arkiver samler flere filer sammen i et enkelt format, typisk zip, tar eller rar. Arkivfiler kan også bruge komprimering for at reducere den samlede filstørrelse.

Du kan bruge arkiver til at distribuere software og data, herunder websider. Du kan også arkivere din applikation med alle dens filer og afhængigheder, så brugerne kan downloade og installere dem.

Go's arkivpakke lader dig oprette og udtrække arkiver i tar- og zip-formater.

Go’s arkivpakke

Go giver arkiv pakker til at arbejde med forskellige arkivformater. Du kan bruge lynlås og tjære pakker til at oprette, læse og skrive arkivfiler i disse formater. Begge pakker understøtter forskellige komprimeringsalgoritmer over en brugervenlig API.

Sådan kan du importere zip- og tar-pakkerne i dine Go-filer:

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

Efter import af pakkerne kan du bruge dem til at oprette og manipulere arkivfiler.

instagram viewer

Oprettelse og tilføjelse af filer til Tar-arkiver

Det tjære pakken fungerer med tjære arkiver af tar og tar.gz formater, herunder understøttelse af læsning og skrivning af filer med PAX-udvidede overskrifter.

Tjærepakken giver en NewWriter funktion til oprettelse af nye tar-arkiver. NewWriter tager en io. Forfatter grænsefladeforekomst, der kan være en fil eller hukommelsesbuffer og returnerer en pointer til tjære. Forfatter struktur.

pakke vigtigste

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

funcvigtigste() {
// Opret en ny fil
fil, _ := os. Skab("myarchive.tar")
udsætte fil. Tæt()

// Opret et nyt tar-arkiv
tarWriter := tar. NewWriter (fil)
udsætte tarWriter. Tæt()
}

Det skab funktion af os pakken opretter en ny tar-fil. Det tjære. NewWriter funktionen tager en fil ind og opretter et nyt arkiv.

Du kan tilføje filer til tar-arkivet med WriteHeader og Skrive funktioner. WriteHeader-funktionen tager en tjære. Header struktur som argument. Dette indeholder filens metadata, såsom filnavn, størrelse og tilladelsesbits. Skrivefunktionen skriver indholdet af en fil til arkivet.

importere (
"arkiv/tjære"
"fmt"
"io"
"log"
"os"
)

funcvigtigste() {
// Opret en ny fil
fil, _ := os. Skab("myarchive.tar")
fil, _ = os. Skab("message.txt")
udsætte fil. Tæt()

// Opret et nyt tar-arkiv
tarWriter := tar. NewWriter (fil)
udsætte tarWriter. Tæt()

// Tilføj en fil til arkivet
fileToAdd, _ := os. Åben("fil1.txt")
udsætte fileToAdd. Tæt()
fileInfo, _ := fileToAdd. Stat()
overskrift, _ := tar. FileInfoHeader (fileInfo, "")
tarWriter. WriteHeader (header)
_, _ = io. Kopier (tarWriter, fileToAdd)
fmt. Println("TAR-arkiveringsoperation afsluttet")
}

Programmet opretter nye tar- og tekstfiler med skab funktion af os pakke og et nyt tjærearkiv med NewWriter, før du tilføjer filen til arkivet.

Det Åben funktionen åbner filen for at tilføje til arkivet. Bemærk, at du skal bruge en fil med navnet fil1.txt i din arbejdsmappe for at køre dette program med succes.

Du kan bruge Stat funktion af en filinstans for at hente de metadata, du skal bruge til tar-headeren. Send resultatet til FileInfoHeader, og send derefter resultatet til WriteHeader funktion til at opsætte tar-filen. Kopier til sidst filen til arkivet vha io. Kopi.

Udpakning af filer fra Tar-arkiver

Du kan bruge NewReader funktion til at læse indholdet af tar-arkivfilen. NewReader-funktionen tager i en io. Læser grænseflade, som kan være en fil eller en hukommelsesbuffer. Det returnerer en pointer til a tjære. Læser struktur.

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

funcvigtigste() {
// Åbn tar-arkivet
fil, _ := os. Åben("myarchive.tar")
udsætte fil. Tæt()

// Opret en ny tar-læser
tarReader := tar. NewReader (fil)

// Gentag over filerne i arkivet
til {
header, fejl := tarReader. Næste()

hvis fejl == io. EOF {
pause
}

// Udpak filen
outFile, _ := os. Opret (overskrift. Navn)
udsætte udfil. Tæt()
_, _ = io. Kopi (outFile, tarReader)
}
}

Det uendelig for loop krydser tar-læser-forekomsten og udpakker filerne ved at kopiere hver fil med io pakkens Kopi fungere.

Oprettelse og tilføjelse af filer til zip-arkiver

Du kan oprette et nyt zip-arkiv med NewWriter funktion af lynlås pakke. NewWriter-funktionen tager en filinstans og returnerer en zip-skriver.

importere (
"arkiv/zip"
"os"
)

funcvigtigste() {
// Opret en ny fil
fil, fejl := os. Skab("arkiv.zip")

hvis fejl!= nul {
panik(fejl)
}

udsætte fil. Tæt()

// Opret en ny zip-skriver
zipWriter := zip. NewWriter (fil)
udsætte zipWriter. Tæt()
}

Det zipWriter variabel gemmer en ny Forfatter eksempel, som NewWriter returnerer.

Du kan tilføje filer til dine zip-arkiver med skab funktion af Writer-instansen. Opret-funktionen tager filnavnet ind. Du kan også bruge Skrive zip-filforekomstens funktion til at skrive data til filer i zip-arkiver.

importere (
"arkiv/zip"
"os"
)

funcvigtigste() {
// Opret nye filer
fil, fejl := os. Skab("arkiv.zip")
fil, err = os. Skab("fil1.txt")
fil, err = os. Skab("fil2.txt")

hvis fejl!= nul {
panik(fejl)
}

udsætte fil. Tæt()

// Opret en ny zip-skriver
zipWriter := zip. NewWriter (fil)
udsætte zipWriter. Tæt()

// Tilføj filer til arkivet
fil1, fejl := zipWriter. Skab("fil1.txt")

hvis fejl!= nul {
panik(fejl)
}

fil2, fejl := zipWriter. Skab("fil2.txt")

hvis fejl!= nul {
panik(fejl)
}

// Skriv data til filerne i arkivet
fil1.Skriv([]byte("Hej Verden!"))
fil2.Skriv([]byte("Farvel, verden!"))
fmt. Println("zip-arkivering udført")
}

Hovedfunktionen starter med at bruge skab for at oprette en ny zip-fil og to tekstfiler. Det opretter derefter to Writers for at tilføje de to tekstfiler til arkivet. Det Skrive funktion af hver filinstans skriver beskeder til hver af filerne i arkivet.

Udpakning af filer fra zip-arkiver

Du kan udpakke en eksisterende zip-fil ved at læse den med OpenReader funktion, og derefter gå gennem dens indhold og kopiere filer med io pakke.

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

funcvigtigste() {
// Åbn arkivet
zipReader, fejl := zip. OpenReader("arkiv.zip")

hvis fejl!= nul {
panik(fejl)
}

udsætte zipReader. Tæt()

// Udpak filer fra arkivet
til _, fil := rækkevidde zipReader. Fil {
zippedFile, fejl := fil. Åben()

hvis fejl!= nul {
panik(fejl)
}

udsætte zippet fil. Tæt()

// Opret en ny fil med samme navn som den zippede fil
extractedFile, fejl := os. Opret (fil. Navn)

hvis fejl!= nul {
panik(fejl)
}

udsætte udtrukket fil. Tæt()

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

hvis fejl!= nul {
panik(fejl)
}

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

Det OpenReader funktion læser zip-arkiver. Det OpenReader funktionen accepterer zip-filnavnet som et argument og returnerer en zip-fillæserforekomst. Det for-rækkevidde loop gennemløber indholdet af filerne i læserforekomsten. Den opretter en ny fil med samme navn som den originale fil og kopierer indholdet af den udpakkede fil til den nye fil ved hjælp af io. Kopi fungere.

Pak ud manuelt eller programmatisk - det er op til dig

Udpakning af filer programmatisk er praktisk, hvis du har mange filer eller arkiver, der skal udpakkes. Du er muligvis også ved at integrere arkivfunktionalitet i din hovedapp.

I andre tilfælde kan du være bedre stillet ved at bruge eksisterende applikationer. Du kan bruge indbyggede apps eller tredjepartsapps til at udpakke arkiver på Windows, macOS og Linux.