Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat. Citeşte mai mult.

Arhivele grupează mai multe fișiere într-un singur format, de obicei zip, tar sau rar. Fișierele de arhivă pot utiliza, de asemenea, compresia pentru a reduce dimensiunea totală a fișierului.

Puteți folosi arhivele pentru a distribui software și date, inclusiv pagini web. De asemenea, vă puteți arhiva aplicația, cu toate fișierele și dependențele sale, pentru ca utilizatorii să le descarce și să o instaleze.

Pachetul de arhive Go vă permite să creați și să extrageți arhive în formate tar și zip.

Pachetul Go’s Archive

Go oferă Arhiva pachete pentru lucrul cu diferite formate de arhivă. Puteți folosi fermoar și gudron pachete pentru a crea, citi și scrie fișiere de arhivă în aceste formate. Ambele pachete acceptă diverși algoritmi de compresie printr-un API ușor de utilizat.

Iată cum puteți importa pachetele zip și tar din fișierele Go:

import (
"arhiva/zip"
"arhiva/tar"
)

După importarea pachetelor, le puteți folosi pentru a crea și manipula fișiere de arhivă.

Crearea și adăugarea de fișiere la arhivele tar

The gudron pachetul funcționează cu gudron arhive de formate tar și tar.gz, inclusiv suport pentru citirea și scrierea fișierelor cu anteturi extinse PAX.

Pachetul de gudron oferă a NewWriter funcție pentru crearea de noi arhive tar. NewWriter preia un io. Scriitor instanță de interfață care poate fi un fișier sau un buffer de memorie și returnează un pointer către gudron. Scriitor struct.

pachet principal

import (
"arhiva/tar"
"os"
)

funcprincipal() {
// Creați un fișier nou
fișier, _ := os. Crea(„myarchive.tar”)
amâna fişier. Închide()

// Creați o nouă arhivă tar
tarWriter := tar. NewWriter (fișier)
amâna tarWriter. Închide()
}

The Crea funcția de os pachetul creează un nou fișier tar. The gudron. NewWriter funcția preia un fișier și creează o arhivă nouă.

Puteți adăuga fișiere în arhiva tar cu ajutorul WriteHeader și Scrie funcții. Funcția WriteHeader ia a gudron. Antet struct ca argument. Acesta conține metadatele fișierului, cum ar fi numele fișierului, dimensiunea și biții de permisiune. Funcția Scriere scrie conținutul unui fișier în arhivă.

import (
"arhiva/tar"
"fmt"
"io"
"Buturuga"
"os"
)

funcprincipal() {
// Creați un fișier nou
fișier, _ := os. Crea(„myarchive.tar”)
fișier, _ = os. Crea(„message.txt”)
amâna fişier. Închide()

// Creați o nouă arhivă tar
tarWriter := tar. NewWriter (fișier)
amâna tarWriter. Închide()

// Adăugați un fișier în arhivă
fileToAdd, _ := os. Deschis(„fișier1.txt”)
amâna fileToAdd. Închide()
fileInfo, _ := fileToAdd. Stat()
antet, _ := tar. FileInfoHeader (Fișier Info, "")
tarWriter. WriteHeader (antet)
_, _ = io. Copiere (tarWriter, fileToAdd)
fmt. Println(„Operațiunea de arhivare TAR finalizată”)
}

Programul creează noi fișiere tar și text cu Crea funcția de os pachet și o nouă arhivă tar cu NewWriter, înainte de a adăuga fișierul în arhivă.

The Deschis funcția deschide fișierul de adăugat la arhivă. Rețineți că veți avea nevoie de un fișier numit fișier1.txt în directorul de lucru pentru a rula acest program cu succes.

Puteți folosi Stat funcția unei instanțe de fișier pentru a prelua metadatele de care veți avea nevoie pentru antetul tar. Transmite rezultatul acestuia la FileInfoHeader, apoi treceți acel rezultat către WriteHeader funcția pentru a configura fișierul tar. În cele din urmă, copiați fișierul în arhivă folosind io. Copie.

Extragerea fișierelor din arhivele tar

Puteți folosi NewReader funcția de citire a conținutului fișierului arhivă tar. Funcția NewReader preia un io. Cititor interfață care poate fi un fișier sau un buffer de memorie. Acesta returnează un pointer către a gudron. Cititor struct.

import (
"arhiva/tar"
"io"
"os"
)

funcprincipal() {
// Deschide arhiva tar
fișier, _ := os. Deschis(„myarchive.tar”)
amâna fişier. Închide()

// Creați un nou cititor de tar
tarReader := tar. NewReader (fișier)

// Iterează peste fișierele din arhivă
pentru {
antet, err := tarReader. Următorul()

dacă err == io. EOF {
pauză
}

// Extrageți fișierul
outFile, _ := os. Creați (antet. Nume)
amâna outFile. Închide()
_, _ = io. Copiere (outFile, tarReader)
}
}

The infinit pentru buclă traversează instanța cititorului tar și extrage fișierele prin copierea fiecărui fișier cu io pachetelor Copie funcţie.

Crearea și adăugarea de fișiere în arhivele Zip

Puteți crea o nouă arhivă zip cu NewWriter funcția de fermoar pachet. Funcția NewWriter preia o instanță de fișier și returnează un writer zip.

import (
"arhiva/zip"
"os"
)

funcprincipal() {
// Creați un fișier nou
fișier, err := os. Crea(„archive.zip”)

dacă greș!= zero {
panică(eroare)
}

amâna fişier. Închide()

// Creați un nou zip writer
zipWriter := zip. NewWriter (fișier)
amâna zipWriter. Închide()
}

The zipWriter variabilă stochează un nou Scriitor exemplu pe care NewWriter îl returnează.

Puteți adăuga fișiere în arhivele dvs. zip cu ajutorul Crea funcția instanței Writer. Funcția Creare preia numele fișierului. De asemenea, puteți utiliza Scrie funcția instanței fișierului zip pentru a scrie date în fișiere din arhivele zip.

import (
"arhiva/zip"
"os"
)

funcprincipal() {
// Creați fișiere noi
fișier, err := os. Crea(„archive.zip”)
fișier, err = os. Crea(„fișier1.txt”)
fișier, err = os. Crea(„fișier2.txt”)

dacă greș!= zero {
panică(eroare)
}

amâna fişier. Închide()

// Creați un nou zip writer
zipWriter := zip. NewWriter (fișier)
amâna zipWriter. Închide()

// Adăugați fișiere în arhivă
file1, err := zipWriter. Crea(„fișier1.txt”)

dacă greș!= zero {
panică(eroare)
}

file2, err := zipWriter. Crea(„fișier2.txt”)

dacă greș!= zero {
panică(eroare)
}

// Scrieți date în fișierele din arhivă
fisier1.Scrie([]octet("Salut Lume!"))
fisier2.Scrie([]octet("La revedere Lume!"))
fmt. Println(„operațiune de arhivare zip finalizată”)
}

Funcția principală începe prin utilizarea Crea pentru a crea un nou fișier zip și două fișiere text. Apoi creează doi Writer pentru a adăuga cele două fișiere text în arhivă. The Scrie funcția fiecărei instanțe de fișier scrie mesaje în fiecare dintre fișierele din arhivă.

Extragerea fișierelor din arhivele Zip

Puteți extrage un fișier zip existent citindu-l cu OpenReader funcția, apoi parcurge conținutul acesteia și copiază fișiere cu io pachet.

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

funcprincipal() {
// Deschide arhiva
zipReader, err := zip. OpenReader(„archive.zip”)

dacă greș!= zero {
panică(eroare)
}

amâna zipReader. Închide()

// Extrageți fișierele din arhivă
pentru _, fișier := gamă zipReader. Fișier {
zippedFile, err := fișier. Deschis()

dacă greș!= zero {
panică(eroare)
}

amâna zippedFile. Închide()

// Creați un fișier nou cu același nume ca fișierul arhivat
extrasFile, err := os. Creați (fișier. Nume)

dacă greș!= zero {
panică(eroare)
}

amâna extrasFile. Închide()

// Copiați datele din fișierul arhivat în noul fișier
_, err = io. Copiere (extractedFile, zippedFile)

dacă greș!= zero {
panică(eroare)
}

fmt. Printf(„%s extras\n”, dosar. Nume)
}
}

The OpenReader funcția citește arhive zip. The OpenReader funcția acceptă numele fișierului zip ca argument și returnează o instanță de citire a fișierului zip. The pentru-gamă bucla traversează conținutul fișierelor din instanța cititorului. Acesta creează un fișier nou cu același nume ca și fișierul original și copiază conținutul fișierului extras în noul fișier folosind io. Copie funcţie.

Dezarhivați manual sau programatic - depinde de dvs

Dezarhivarea fișierelor în mod programatic este convenabilă dacă aveți multe fișiere sau arhive de dezarhivat. Este posibil să integrați și funcționalitatea de arhivă în aplicația dvs. principală.

În alte cazuri, este mai bine să utilizați aplicațiile existente. Puteți utiliza aplicații încorporate sau de la terțe părți pentru a dezarhiva arhivele pe Windows, macOS și Linux.