Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

Os arquivos agrupam vários arquivos em um único formato, geralmente zip, tar ou rar. Arquivos compactados também podem usar compactação para reduzir o tamanho total do arquivo.

Você pode usar arquivos para distribuir software e dados, incluindo páginas da web. Você também pode arquivar seu aplicativo, com todos os seus arquivos e dependências, para que os usuários baixem e instalem.

O pacote de arquivos do Go permite criar e extrair arquivos nos formatos tar e zip.

Pacote de arquivos do Go

Go fornece arquivo pacotes para trabalhar com vários formatos de arquivo. Você pode usar o fecho eclair e alcatrão pacotes para criar, ler e escrever arquivos compactados nesses formatos. Ambos os pacotes oferecem suporte a vários algoritmos de compactação em uma API fácil de usar.

Veja como você pode importar os pacotes zip e tar em seus arquivos Go:

instagram viewer
importar (
"arquivar/zipar"
"arquivo/tar"
)

Depois de importar os pacotes, você pode usá-los para criar e manipular arquivos compactados.

Criando e Adicionando Arquivos aos Arquivos Tar

O alcatrão pacote funciona com alcatrão arquivos dos formatos tar e tar.gz, incluindo suporte para leitura e gravação de arquivos com cabeçalhos estendidos PAX.

O pacote tar fornece um NewWriter função para criar novos arquivos tar. NewWriter leva em um io. Escritor instância de interface que pode ser um arquivo ou buffer de memória e retorna um ponteiro para o alcatrão. Escritor struct.

pacote principal

importar (
"arquivo/tar"
"os"
)

funçãoprincipal() {
// Cria um novo arquivo
arquivo, _ := os. Criar("meuarquivo.tar")
adiar arquivo. Fechar()

// Cria um novo arquivo tar
tarWriter := tar. NewWriter (arquivo)
adiar tarWriter. Fechar()
}

O Criar função do os pacote cria um novo arquivo tar. O alcatrão. NewWriter A função recebe um arquivo e cria um novo arquivo.

Você pode adicionar arquivos ao arquivo tar com o comando WriteHeader e Escrever funções. A função WriteHeader leva um alcatrão. Cabeçalho estrutura como um argumento. Contém os metadados do arquivo, como o nome do arquivo, tamanho e bits de permissão. A função Write grava o conteúdo de um arquivo no arquivo.

importar (
"arquivo/tar"
"fmt"
"io"
"registro"
"os"
)

funçãoprincipal() {
// Cria um novo arquivo
arquivo, _ := os. Criar("meuarquivo.tar")
arquivo, _ = os. Criar("mensagem.txt")
adiar arquivo. Fechar()

// Cria um novo arquivo tar
tarWriter := tar. NewWriter (arquivo)
adiar tarWriter. Fechar()

// Adiciona um arquivo ao arquivo
fileToAdd, _ := os. Abrir("arquivo1.txt")
adiar fileToAdd. Fechar()
fileInfo, _ := fileToAdd. Estado()
cabeçalho, _ := tar. FileInfoHeader (arquivoInfo, "")
tarWriter. WriteHeader (cabeçalho)
_, _ = io. Copiar (tarWriter, fileToAdd)
fmt. Imprimirln("Operação de arquivo TAR concluída")
}

O programa cria novos arquivos tar e texto com a extensão Criar função do os pacote e um novo arquivo tar com o NewWriter, antes de adicionar o arquivo ao arquivo.

O Abrir função abre o arquivo para adicionar ao arquivo. Observe que você precisará de um arquivo chamado arquivo1.txt em seu diretório de trabalho para executar este programa com sucesso.

Você pode usar o Estado função de uma instância de arquivo para buscar os metadados necessários para o cabeçalho tar. Passe seu resultado para FileInfoHeader, em seguida, passe esse resultado para o WriteHeader função para configurar o arquivo tar. Finalmente, copie o arquivo para o arquivo usando io. cópia de.

Extraindo arquivos de arquivos tar

Você pode usar o NovoLeitor função para ler o conteúdo do arquivo tar. A função NewReader recebe um io. Leitor interface que pode ser um arquivo ou um buffer de memória. Ele retorna um ponteiro para um alcatrão. Leitor struct.

importar (
"arquivo/tar"
"io"
"os"
)

funçãoprincipal() {
// Abre o arquivo tar
arquivo, _ := os. Abrir("meuarquivo.tar")
adiar arquivo. Fechar()

// Cria um novo leitor tar
tarReader := tar. NewReader (arquivo)

// Iterar sobre os arquivos no arquivo
para {
cabeçalho, erro := tarReader. Próximo()

se erro == io. EOF {
quebrar
}

// Extrai o arquivo
outArquivo, _ := os. Criar (cabeçalho. Nome)
adiar outArquivo. Fechar()
_, _ = io. Copiar (outFile, tarReader)
}
}

O loop for infinito percorre a instância do leitor tar e extrai os arquivos copiando cada arquivo com o io pacote de cópia de função.

Criando e Adicionando Arquivos a Arquivos Zip

Você pode criar um novo arquivo zip com o NewWriter função do fecho eclair pacote. A função NewWriter pega uma instância de arquivo e retorna um gravador de zip.

importar (
"arquivar/zipar"
"os"
)

funçãoprincipal() {
// Cria um novo arquivo
arquivo, erro := os. Criar("arquivo.zip")

se erro != nada {
pânico(errar)
}

adiar arquivo. Fechar()

// Cria um novo gravador de zip
zipWriter := zip. NewWriter (arquivo)
adiar zipWriter. Fechar()
}

O zipWriter variável armazena um novo Escritor instância que NewWriter retorna.

Você pode adicionar arquivos aos seus arquivos zip com o Criar função da instância Writer. A função Create recebe o nome do arquivo. Você também pode usar o Escrever função da instância do arquivo zip para gravar dados em arquivos em arquivos zip.

importar (
"arquivar/zipar"
"os"
)

funçãoprincipal() {
// Cria novos arquivos
arquivo, erro := os. Criar("arquivo.zip")
arquivo, erro = os. Criar("arquivo1.txt")
arquivo, erro = os. Criar("arquivo2.txt")

se erro != nada {
pânico(errar)
}

adiar arquivo. Fechar()

// Cria um novo gravador de zip
zipWriter := zip. NewWriter (arquivo)
adiar zipWriter. Fechar()

// Adiciona arquivos ao arquivo
arquivo1, erro := zipWriter. Criar("arquivo1.txt")

se erro != nada {
pânico(errar)
}

arquivo2, erro := zipWriter. Criar("arquivo2.txt")

se erro != nada {
pânico(errar)
}

// Grava dados nos arquivos no arquivo
arquivo1.Write([]byte("Olá Mundo!"))
arquivo2.Write([]byte("Adeus mundo!"))
fmt. Imprimirln("operação de arquivamento zip concluída")
}

A função principal começa usando Criar para criar um novo arquivo zip e dois arquivos de texto. Em seguida, ele cria dois gravadores para adicionar os dois arquivos de texto ao arquivo. O Escrever A função de cada instância de arquivo grava mensagens em cada um dos arquivos no arquivo.

Extraindo arquivos de arquivos Zip

Você pode extrair um arquivo zip existente lendo-o com o OpenReader função e, em seguida, percorrendo seu conteúdo e copiando arquivos com o io pacote.

importar (
"arquivar/zipar"
"fmt"
"io"
"os"
)

funçãoprincipal() {
// Abre o arquivo
zipReader, err := zip. OpenReader("arquivo.zip")

se erro != nada {
pânico(errar)
}

adiar zipReader. Fechar()

// Extrai arquivos do arquivo
para _, arquivo := faixa zipReader. Arquivo {
zippedFile, erro := arquivo. Abrir()

se erro != nada {
pânico(errar)
}

adiar zippedFile. Fechar()

// Cria um novo arquivo com o mesmo nome do arquivo compactado
arquivoextraído, err := os. Criar (arquivo. Nome)

se erro != nada {
pânico(errar)
}

adiar arquivoextraído. Fechar()

// Copia os dados do arquivo compactado para o novo arquivo
_, erro = io. Copiar (extractedFile, zippedFile)

se erro != nada {
pânico(errar)
}

fmt. Imprimirf("%s\n extraído", arquivo. Nome)
}
}

O OpenReader função lê arquivos zip. O OpenReader A função aceita o nome do arquivo zip como um argumento e retorna uma instância do leitor de arquivo zip. O para-intervalo loop percorre o conteúdo dos arquivos na instância do leitor. Ele cria um novo arquivo com o mesmo nome do arquivo original e copia o conteúdo do arquivo extraído para o novo arquivo usando o comando io. cópia de função.

Descompacte manualmente ou programaticamente - depende de você

Descompactar arquivos programaticamente é conveniente se você tiver muitos arquivos ou arquivos para descompactar. Você também pode estar integrando a funcionalidade de arquivamento em seu aplicativo principal.

Em outros casos, pode ser melhor usar aplicativos existentes. Você pode usar aplicativos integrados ou de terceiros para descompactar arquivos no Windows, macOS e Linux.