264 votes

Ruby - convertir un fichier en chaîne

J'ai besoin d'un moyen facile de prendre un fichier tar et le convertir en une chaîne de caractères (et vice versa). Est-il un moyen de le faire en Ruby? Ma meilleure tentative a ce:

file = File.open("path-to-file.tar.gz")
contents = ""
file.each {|line|
  contents << line
}

J'ai pensé que ce serait suffisant pour la convertir en une chaîne de caractères, mais ensuite quand j'essaie de l'écrire comme ceci...

newFile = File.open("test.tar.gz", "w")
newFile.write(contents)

Ce n'est pas le même fichier. Faire ls -l affiche les fichiers sont de tailles différentes, même si elles sont assez proches (et de l'ouverture du fichier révèle la plupart du contenu intact). Est il y a une petite erreur, je suis en train de faire ni tout à fait différents (mais efficace) pour accomplir cette?

398voto

David Nehme Points 11564

Tout d’abord, vous devez ouvrir le fichier comme un fichier binaire. Ensuite, vous pouvez lire l’intégralité du fichier, en une seule commande.

Que vous obtiendrez l’intégralité du fichier dans une chaîne.

Après cela, vous voudrez probablement . Si vous ne faites pas cela, ne sera pas fermé jusqu'à ce qu’il est nettoyé, et il serait donc une légère perte de ressources système, bien qu’il soit ouvert.

114voto

Aaron Hinni Points 7879

Pour éviter de laisser le fichier ouvert, il est préférable de passer un bloc à File.open. De cette façon, le fichier sera fermé après l'exécution du bloc.

 contents = File.open('path-to-file.tar.gz', 'rb') { |f| f.read }
 

17voto

Alex Points 1864

que diriez-vous de la sécurité ouverte / fermée.

 string = File.open('file.txt', 'rb') { |file| file.read }
 

16voto

Purfideas Points 1852

sur os x ce sont les mêmes pour moi ... cela pourrait-il être "" supplémentaire dans Windows?

en tout cas, vous pouvez être meilleur avec:

 contents = File.read("e.tgz")
newFile = File.open("ee.tgz", "w")
newFile.write(contents)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X