Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

Archieven bundelen verschillende bestanden samen in één formaat, meestal zip, tar of rar. Archiefbestanden kunnen ook compressie gebruiken om de totale bestandsgrootte te verkleinen.

U kunt archieven gebruiken om software en gegevens te verspreiden, inclusief webpagina's. U kunt uw applicatie ook archiveren, met al zijn bestanden en afhankelijkheden, zodat gebruikers deze kunnen downloaden en installeren.

Met het archiefpakket van Go kunt u archieven maken en extraheren in tar- en zip-indelingen.

Go's archiefpakket

Go biedt archief pakketten voor het werken met verschillende archiefformaten. U kunt de ritssluiting En teer pakketten om archiefbestanden in die formaten te maken, lezen en schrijven. Beide pakketten ondersteunen verschillende compressie-algoritmen via een gebruiksvriendelijke API.

Zo importeer je de zip- en tar-pakketten in je Go-bestanden:

instagram viewer
importeren (
"archief/zip"
"archief/teer"
)

Na het importeren van de pakketten kunt u ze gebruiken om archiefbestanden te maken en te manipuleren.

Bestanden maken en toevoegen aan Tar-archieven

De teer pakket werkt met teer archieven van tar- en tar.gz-formaten, inclusief ondersteuning voor het lezen en schrijven van bestanden met uitgebreide PAX-headers.

Het tar-pakket biedt een NieuweSchrijver functie voor het maken van nieuwe tar-archieven. NewWriter neemt een io. auteur interface-instantie die een bestand of geheugenbuffer kan zijn en een aanwijzer retourneert naar het teer. auteur structuur.

pakket voornaamst

importeren (
"archief/teer"
"os"
)

funcvoornaamst() {
// Maak een nieuw bestand aan
bestand, _ := os. Creëren("mijnarchief.tar")
verschuiven bestand. Dichtbij()

// Maak een nieuw tar-archief aan
tarWriter := tar. NewWriter (bestand)
verschuiven tarWriter. Dichtbij()
}

De Creëren functie van de os pakket maakt een nieuw tar-bestand aan. De teer. NieuweSchrijver functie neemt een bestand op en maakt een nieuw archief aan.

U kunt bestanden aan het tar-archief toevoegen met de SchrijvenHeader En Schrijven functies. De functie WriteHeader neemt een teer. Koptekst structuur als een argument. Dit bevat de metadata van het bestand, zoals de bestandsnaam, grootte en toestemmingsbits. De functie Schrijven schrijft de inhoud van een bestand naar het archief.

importeren (
"archief/teer"
"fmt"
"io"
"logboek"
"os"
)

funcvoornaamst() {
// Maak een nieuw bestand aan
bestand, _ := os. Creëren("mijnarchief.tar")
bestand, _ = os. Creëren("bericht.txt")
verschuiven bestand. Dichtbij()

// Maak een nieuw tar-archief aan
tarWriter := tar. NewWriter (bestand)
verschuiven tarWriter. Dichtbij()

// Voeg een bestand toe aan het archief
fileToAdd, _ := os. Open("bestand1.txt")
verschuiven fileToAdd. Dichtbij()
fileInfo, _ := fileToAdd. Statistiek()
koptekst, _ := teer. FileInfoHeader (bestandsinfo, "")
tarWriter. WriteHeader (koptekst)
_, _ = io. Kopiëren (tarWriter, fileToAdd)
fmt. Println("TAR-archiefbewerking voltooid")
}

Het programma maakt nieuwe tar- en tekstbestanden met de Creëren functie van de os pakket en een nieuw tar-archief met de NieuweSchrijver, voordat u het bestand aan het archief toevoegt.

De Open functie opent het bestand om toe te voegen aan het archief. Merk op dat je een bestand met de naam nodig hebt bestand1.txt in uw werkmap om dit programma met succes uit te voeren.

U kunt de stat functie van een bestandsinstantie om de metadata op te halen die u nodig hebt voor de tar-header. Geef het resultaat door aan FileInfoHeader, geef dat resultaat dan door aan de SchrijvenHeader functie om het tar-bestand in te stellen. Kopieer ten slotte het bestand naar het archief met behulp van io. Kopiëren.

Bestanden uit teerarchieven extraheren

U kunt de nieuwelezer functie om de inhoud van het tar-archiefbestand te lezen. De NewReader-functie neemt een io. Lezer interface die een bestand of een geheugenbuffer kan zijn. Het geeft een pointer terug naar a teer. Lezer structuur.

importeren (
"archief/teer"
"io"
"os"
)

funcvoornaamst() {
// Open het tar-archief
bestand, _ := os. Open("mijnarchief.tar")
verschuiven bestand. Dichtbij()

// Maak een nieuwe tar-lezer
tarReader := tar. NewReader (bestand)

// Herhaal de bestanden in het archief
voor {
header, err := tarReader. Volgende()

als fout == io. EOF {
pauze
}

// Pak het bestand uit
outFile, _ := os. Maak (kop. Naam)
verschuiven outFile. Dichtbij()
_, _ = io. Kopiëren (outFile, tarReader)
}
}

De oneindige lus doorloopt de instantie van de tar-lezer en extraheert de bestanden door elk bestand te kopiëren met de io pakketjes Kopiëren functie.

Bestanden maken en toevoegen aan zip-archieven

U kunt een nieuw zip-archief maken met de NieuweSchrijver functie van de ritssluiting pakket. De NewWriter-functie neemt een bestandsinstantie in en retourneert een zip-schrijver.

importeren (
"archief/zip"
"os"
)

funcvoornaamst() {
// Maak een nieuw bestand aan
bestand, fout := os. Creëren("archief.zip")

als fout!= nihil {
paniek(fout)
}

verschuiven bestand. Dichtbij()

// Maak een nieuwe zip-schrijver
zipWriter := zip. NewWriter (bestand)
verschuiven zipWriter. Dichtbij()
}

De zipWriter variabele slaat een nieuw op auteur instantie die NewWriter retourneert.

U kunt bestanden aan uw zip-archieven toevoegen met de Creëren functie van de Writer-instantie. De functie Create neemt de bestandsnaam over. U kunt ook de Schrijven functie van de zip-bestandsinstantie om gegevens naar bestanden in zip-archieven te schrijven.

importeren (
"archief/zip"
"os"
)

funcvoornaamst() {
// Nieuwe bestanden maken
bestand, fout := os. Creëren("archief.zip")
bestand, fout = os. Creëren("bestand1.txt")
bestand, fout = os. Creëren("bestand2.txt")

als fout!= nihil {
paniek(fout)
}

verschuiven bestand. Dichtbij()

// Maak een nieuwe zip-schrijver
zipWriter := zip. NewWriter (bestand)
verschuiven zipWriter. Dichtbij()

// Voeg bestanden toe aan het archief
bestand1, fout := zipWriter. Creëren("bestand1.txt")

als fout!= nihil {
paniek(fout)
}

bestand2, fout := zipWriter. Creëren("bestand2.txt")

als fout!= nihil {
paniek(fout)
}

// Schrijf gegevens naar de bestanden in het archief
bestand1.Schrijven([]byte("Hallo Wereld!"))
bestand2.Schrijven([]byte("Vaarwel wereld!"))
fmt. Println("zip-archivering voltooid")
}

De hoofdfunctie begint met gebruik Creëren om een ​​nieuw zip-bestand en twee tekstbestanden te maken. Vervolgens worden twee Writers gemaakt om de twee tekstbestanden aan het archief toe te voegen. De Schrijven functie van elke bestandsinstantie schrijft berichten naar elk van de bestanden in het archief.

Bestanden uitpakken uit zip-archieven

U kunt een bestaand zipbestand uitpakken door het te lezen met de OpenReader functie, dan door de inhoud bladeren en bestanden kopiëren met de io pakket.

importeren (
"archief/zip"
"fmt"
"io"
"os"
)

funcvoornaamst() {
// Open het archief
zipReader, fout := zip. OpenReader("archief.zip")

als fout!= nihil {
paniek(fout)
}

verschuiven zipReader. Dichtbij()

// Pak bestanden uit het archief uit
voor _, bestand := bereik zipReader. Bestand {
zippedFile, fout := bestand. Open()

als fout!= nihil {
paniek(fout)
}

verschuiven gezipteBestand. Dichtbij()

// Maak een nieuw bestand aan met dezelfde naam als het gecomprimeerde bestand
extractFile, err := os. Maak (bestand. Naam)

als fout!= nihil {
paniek(fout)
}

verschuiven geëxtraheerdBestand. Dichtbij()

// Kopieer de gegevens van het gecomprimeerde bestand naar het nieuwe bestand
_, fout = io. Kopiëren (geëxtraheerd bestand, gezipt bestand)

als fout!= nihil {
paniek(fout)
}

fmt. Afdrukkenf("%s\n uitgepakt", bestand. Naam)
}
}

De OpenReader functie leest zip-archieven. De OpenReader functie accepteert de naam van het zip-bestand als een argument en retourneert een zip-bestandlezer. De voor bereik lus doorloopt de inhoud van de bestanden in de reader-instantie. Het maakt een nieuw bestand aan met dezelfde naam als het originele bestand en kopieert de inhoud van het uitgepakte bestand naar het nieuwe bestand met behulp van de io. Kopiëren functie.

Unzip handmatig of programmatisch - het is aan jou

Bestanden programmatisch uitpakken is handig als u veel bestanden of archieven moet uitpakken. Mogelijk integreert u ook archieffunctionaliteit in uw hoofdapp.

In andere gevallen kunt u beter bestaande toepassingen gebruiken. U kunt ingebouwde apps of apps van derden gebruiken om archieven uit te pakken op Windows, macOS en Linux.