Eu preciso de uma maneira fácil de pegar um arquivo tar e convertê-lo em uma string (e vice-versa). Existe uma maneira de fazer isso em Ruby? Minha melhor tentativa foi esta:
file = File.open("path-to-file.tar.gz")
contents = ""
file.each {|line|
contents << line
}
Eu pensei que seria o suficiente para convertê-lo em uma seqüência de caracteres, mas quando eu tento escrever de volta assim ...
newFile = File.open("test.tar.gz", "w")
newFile.write(contents)
Não é o mesmo arquivo. Doing ls -l
mostra que os arquivos têm tamanhos diferentes, embora estejam bem próximos (e a abertura do arquivo revela a maior parte do conteúdo intacta). Há um pequeno erro que estou cometendo ou uma maneira totalmente diferente (mas viável) de fazer isso?
IO.read
seria a resposta preferida.Respostas:
Primeiro, você deve abrir o arquivo como um arquivo binário. Então você pode ler o arquivo inteiro, em um comando.
Isso te dará o arquivo inteiro em uma string.
Depois disso, você provavelmente quer
file.close
. Se você não fizer isso,file
não será fechado até que seja coletado como lixo, portanto seria um pequeno desperdício de recursos do sistema enquanto estiver aberto.fonte
contents = (contents of file "path to file.txt" as string)
.begin {..open..} ensure {..close..} end
blocoscontents = File.binread('path-to-file.tar.gz')
Veja apidock .File
é uma subclasse deIO
.Se você precisar do modo binário, precisará fazer da maneira mais difícil:
Caso contrário, menor e mais doce é:
fonte
s = File.open(filename, 'rb', &:read)
Para evitar deixar o arquivo aberto, é melhor passar um bloco para File.open. Dessa forma, o arquivo será fechado após a execução do bloco.
fonte
no os x estes são os mesmos para mim ... isso poderia ser extra "\ r" no windows?
em qualquer caso, você pode ser melhor com:
fonte
que tal alguma segurança de abrir / fechar.
fonte
Ruby tem leitura binária
ou se for menor que Ruby 1.9.2
fonte
Você provavelmente pode codificar o arquivo tar no Base64. A Base 64 fornecerá uma representação ASCII pura do arquivo que você pode armazenar em um arquivo de texto sem formatação. Em seguida, você pode recuperar o arquivo tar decodificando o texto novamente.
Você faz algo como:
Veja os Rubydocs Base64 para ter uma idéia melhor.
fonte
Se você pode codificar o arquivo tar pelo Base64 (e armazená-lo em um arquivo de texto sem formatação), poderá usar
ou
para imprimir cada linha (texto) no cmd.
fonte