Ich brauche eine einfache Möglichkeit, eine TAR-Datei in eine Zeichenfolge zu konvertieren (und umgekehrt). Gibt es eine Möglichkeit, dies in Ruby zu tun? Mein bester Versuch war folgender:
file = File.open("path-to-file.tar.gz")
contents = ""
file.each {|line|
contents << line
}
Ich dachte, das würde ausreichen, um es in einen String umzuwandeln, aber wenn ich dann versuche, es so wieder aufzuschreiben ...
newFile = File.open("test.tar.gz", "w")
newFile.write(contents)
Es ist nicht dieselbe Datei. Wenn Sie dies tun ls -l
, werden die Dateien unterschiedlich groß, obwohl sie ziemlich nahe beieinander liegen (und beim Öffnen der Datei werden die meisten Inhalte intakt angezeigt). Gibt es einen kleinen Fehler, den ich mache, oder einen ganz anderen (aber praktikablen) Weg, dies zu erreichen?
IO.read
dies sonst die bevorzugte Antwort wäre.Antworten:
Zunächst sollten Sie die Datei als Binärdatei öffnen. Dann können Sie die gesamte Datei mit einem Befehl einlesen.
Dadurch erhalten Sie die gesamte Datei in einer Zeichenfolge.
Danach möchten Sie wahrscheinlich
file.close
. Wenn Sie dies nicht tun,file
wird es erst geschlossen, wenn es durch Müll gesammelt wurde. Dies wäre eine leichte Verschwendung von Systemressourcen, solange es geöffnet ist.quelle
contents = (contents of file "path to file.txt" as string)
.begin {..open..} ensure {..close..} end
Blöcken erfolgencontents = File.binread('path-to-file.tar.gz')
Siehe Apidock .File
ist eine Unterklasse vonIO
.Wenn Sie den Binärmodus benötigen, müssen Sie dies auf die harte Tour tun:
Wenn nicht, ist kürzer und süßer:
quelle
s = File.open(filename, 'rb', &:read)
Um zu vermeiden, dass die Datei geöffnet bleibt, übergeben Sie am besten einen Block an File.open. Auf diese Weise wird die Datei geschlossen, nachdem der Block ausgeführt wurde.
quelle
auf os x sind diese für mich gleich ... könnte dies vielleicht ein zusätzliches "\ r" in Windows sein?
In jedem Fall können Sie besser sein mit:
quelle
Wie wäre es mit etwas Sicherheit beim Öffnen / Schließen?
quelle
Ruby hat binäres Lesen
oder wenn weniger als Ruby 1.9.2
quelle
Sie können die TAR-Datei wahrscheinlich in Base64 codieren. Base 64 bietet Ihnen eine reine ASCII-Darstellung der Datei, die Sie in einer Nur-Text-Datei speichern können. Anschließend können Sie die TAR-Datei abrufen, indem Sie den Text zurückdecodieren.
Du machst so etwas wie:
Schauen Sie sich die Base64 Rubydocs an, um eine bessere Vorstellung zu bekommen.
quelle
Wenn Sie die TAR-Datei mit Base64 codieren (und in einer Nur-Text-Datei speichern) können, können Sie sie verwenden
oder
um jede (Text-) Zeile im cmd zu drucken.
quelle