I need an easy way to take a tar file and convert it into a string (and vice versa). Is there a way to do this in Ruby? My best attempt was this:
file = File.open("path-to-file.tar.gz")
contents = ""
file.each {|line|
contents << line
}
I thought that would be enough to convert it to a string, but then when I try to write it back out like this...
newFile = File.open("test.tar.gz", "w")
newFile.write(contents)
It isn't the same file. Doing ls -l
shows the files are of different sizes, although they are pretty close (and opening the file reveals most of the contents intact). Is there a small mistake I'm making or an entirely different (but workable) way to accomplish this?
Ruby have binary reading
or if less than Ruby 1.9.2
First, you should open the file as a binary file. Then you can read the entire file in, in one command.
That will get you the entire file in a string.
After that, you probably want to
file.close
. If you don’t do that,file
won’t be closed until it is garbage-collected, so it would be a slight waste of system resources while it is open.how about some open/close safety.
You can probably encode the tar file in Base64. Base 64 will give you a pure ASCII representation of the file that you can store in a plain text file. Then you can retrieve the tar file by decoding the text back.
You do something like:
Have look at the Base64 Rubydocs to get a better idea.
If you need binary mode, you'll need to do it the hard way:
If not, shorter and sweeter is:
on os x these are the same for me... could this maybe be extra "\r" in windows?
in any case you may be better of with: