Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Archivy spojují několik souborů do jednoho formátu, obvykle zip, tar nebo rar. Archivní soubory mohou také používat kompresi ke snížení celkové velikosti souboru.

Archivy můžete použít k distribuci softwaru a dat, včetně webových stránek. Můžete také archivovat svou aplikaci se všemi jejími soubory a závislostmi, aby si ji uživatelé mohli stáhnout a nainstalovat.

Archivní balíček Go vám umožňuje vytvářet a extrahovat archivy ve formátech tar a zip.

Go's Archive Package

Go poskytuje archiv balíčky pro práci s různými archivními formáty. Můžete použít zip a dehet balíčky pro vytváření, čtení a zápis archivních souborů v těchto formátech. Oba balíčky podporují různé kompresní algoritmy přes snadno použitelné API.

Zde je návod, jak importovat balíčky zip a tar do souborů Go:

import (
"archiv/zip"
"archiv/tar"
)

Po importu balíčků je můžete použít k vytváření a manipulaci s archivními soubory.

instagram viewer

Vytváření a přidávání souborů do archivů Tar

The dehet balíček pracuje s tar archivy formátů tar a tar.gz, včetně podpory pro čtení a zápis souborů s rozšířenými hlavičkami PAX.

Balíček tar poskytuje a NewWriter funkce pro vytváření nových archivů tar. NewWriter bere v io. Spisovatel instance rozhraní, která může být souborem nebo vyrovnávací pamětí a vrací ukazatel na dehet. Spisovatel strukturovat.

balík hlavní

import (
"archiv/tar"
"os"
)

funchlavní() {
// Vytvořte nový soubor
soubor, _ := os. Vytvořit("myarchive.tar")
odložit soubor. Zavřít()

// Vytvořte nový archiv tar
tarWriter := tar. NewWriter (soubor)
odložit tarWriter. Zavřít()
}

The Vytvořit funkce os balíček vytvoří nový soubor tar. The dehet. NewWriter funkce vezme soubor a vytvoří nový archiv.

Soubory můžete přidávat do archivu tar pomocí WriteHeader a Napsat funkcí. Funkce WriteHeader trvá a dehet. Záhlaví struktura jako argument. Obsahuje metadata souboru, jako je název souboru, velikost a bity oprávnění. Funkce Write zapíše obsah souboru do archivu.

import (
"archiv/tar"
"fmt"
"io"
"log"
"os"
)

funchlavní() {
// Vytvořte nový soubor
soubor, _ := os. Vytvořit("myarchive.tar")
soubor, _ = os. Vytvořit("message.txt")
odložit soubor. Zavřít()

// Vytvořte nový archiv tar
tarWriter := tar. NewWriter (soubor)
odložit tarWriter. Zavřít()

// Přidání souboru do archivu
fileToAdd, _ := os. OTEVŘENO("soubor1.txt")
odložit fileToAdd. Zavřít()
fileInfo, _ := fileToAdd. Stat()
záhlaví, _ := tar. FileInfoHeader (fileInfo, "")
tarWriter. WriteHeader (záhlaví)
_, _ = io. Kopírovat (tarWriter, fileToAdd)
fmt. Println("Operace archivace TAR dokončena")
}

Program vytvoří nové tar a textové soubory s Vytvořit funkce os balíček a nový archiv tar s příponou NewWriter, před přidáním souboru do archivu.

The OTEVŘENO Funkce otevře soubor pro přidání do archivu. Všimněte si, že budete potřebovat soubor s názvem soubor1.txt ve vašem pracovním adresáři pro úspěšné spuštění tohoto programu.

Můžete použít Stat funkce instance souboru k načtení metadat, která budete potřebovat pro hlavičku tar. Předejte jeho výsledek FileInfoHeader, pak tento výsledek předejte WriteHeader funkce pro nastavení souboru tar. Nakonec zkopírujte soubor do archivu pomocí io. kopírovat.

Extrahování souborů z archivů Tar

Můžete použít NewReader funkce pro čtení obsahu archivního souboru tar. Funkce NewReader zabírá io. Čtenář rozhraní, kterým může být soubor nebo vyrovnávací paměť. Vrací ukazatel na a dehet. Čtenář strukturovat.

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

funchlavní() {
// Otevřete archiv tar
soubor, _ := os. OTEVŘENO("myarchive.tar")
odložit soubor. Zavřít()

// Vytvořte novou čtečku taru
tarReader := tar. NewReader (soubor)

// Iterujte soubory v archivu
pro {
hlavička, err := tarReader. Další()

-li chyba == io. EOF {
přestávka
}

// Extrahujte soubor
outFile, _ := os. Vytvořit (záhlaví. Název)
odložit outFile. Zavřít()
_, _ = io. Kopírovat (outFile, tarReader)
}
}

The nekonečná smyčka for projde instancí čtečky tar a extrahuje soubory zkopírováním každého souboru pomocí io balíček kopírovat funkce.

Vytváření a přidávání souborů do archivů ZIP

Můžete vytvořit nový zip archiv pomocí NewWriter funkce zip balík. Funkce NewWriter vezme instanci souboru a vrátí zapisovač zip.

import (
"archiv/zip"
"os"
)

funchlavní() {
// Vytvořte nový soubor
soubor, chyba := os. Vytvořit("archive.zip")

-li chyba!= nula {
panika(chybovat)
}

odložit soubor. Zavřít()

// Vytvořte nový zapisovač zip
zipWriter := zip. NewWriter (soubor)
odložit zipWriter. Zavřít()
}

The zipWriter proměnná ukládá nový Spisovatel instance, kterou NewWriter vrátí.

Soubory můžete do archivů zip přidávat pomocí Vytvořit funkce instance Writer. Funkce Create převezme název souboru. Můžete také použít Napsat funkce instance souboru zip pro zápis dat do souborů v archivech zip.

import (
"archiv/zip"
"os"
)

funchlavní() {
// Vytvořte nové soubory
soubor, chyba := os. Vytvořit("archive.zip")
soubor, err = os. Vytvořit("soubor1.txt")
soubor, err = os. Vytvořit("soubor2.txt")

-li chyba!= nula {
panika(chybovat)
}

odložit soubor. Zavřít()

// Vytvořte nový zapisovač zip
zipWriter := zip. NewWriter (soubor)
odložit zipWriter. Zavřít()

// Přidání souborů do archivu
soubor1, chyba := zipWriter. Vytvořit("soubor1.txt")

-li chyba!= nula {
panika(chybovat)
}

soubor2, chyba := zipWriter. Vytvořit("soubor2.txt")

-li chyba!= nula {
panika(chybovat)
}

// Zápis dat do souborů v archivu
soubor1.Napiš([]byte("Ahoj světe!"))
soubor2.Napiš([]byte("Sbohem světe!"))
fmt. Println("operace archivace zip dokončena")
}

Hlavní funkce začíná použitím Vytvořit pro vytvoření nového souboru zip a dvou textových souborů. Poté vytvoří dva zapisovače pro přidání dvou textových souborů do archivu. The Napsat funkce každé instance souboru zapisuje zprávy do každého ze souborů v archivu.

Extrahování souborů z archivů ZIP

Existující soubor zip můžete extrahovat jeho přečtením pomocí souboru OpenReader funkci, poté procházení jejím obsahem a kopírování souborů pomocí io balík.

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

funchlavní() {
// Otevřete archiv
zipReader, chyba := zip. OpenReader("archive.zip")

-li chyba!= nula {
panika(chybovat)
}

odložit zipReader. Zavřít()

// Extrahujte soubory z archivu
pro _, soubor := rozsah zipReader. Soubor {
zipedFile, err := soubor. OTEVŘENO()

-li chyba!= nula {
panika(chybovat)
}

odložit zipSoubor. Zavřít()

// Vytvořte nový soubor se stejným názvem jako zazipovaný soubor
extractFile, err := os. Vytvořit (soubor. Název)

-li chyba!= nula {
panika(chybovat)
}

odložit extrahovaný soubor. Zavřít()

// Zkopírujte data ze zazipovaného souboru do nového souboru
_, chyba = io. Kopírovat (extrahovaný soubor, zazipovaný soubor)

-li chyba!= nula {
panika(chybovat)
}

fmt. Printf("Extrahováno %s\n", soubor. Název)
}
}

The OpenReader funkce čte archivy zip. The OpenReader funkce přijímá název souboru zip jako argument a vrací instanci čtečky souboru zip. The pro-rozsah smyčka prochází obsahem souborů v instanci čtečky. Vytvoří nový soubor se stejným názvem jako původní soubor a zkopíruje obsah extrahovaného souboru do nového souboru pomocí io. kopírovat funkce.

Rozbalte ručně nebo programově – je to na vás

Programové rozbalování souborů je výhodné, pokud máte k rozbalení mnoho souborů nebo archivů. Možná také integrujete funkci archivace do své hlavní aplikace.

V jiných případech může být lepší použít stávající aplikace. K rozbalení archivů v systémech Windows, macOS a Linux můžete použít vestavěné aplikace nebo aplikace třetích stran.