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:
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.