Saya perlu cara mudah untuk mengambil file tar dan mengubahnya menjadi string (dan sebaliknya). Apakah ada cara untuk melakukan ini di Ruby? Upaya terbaik saya adalah ini:
file = File.open("path-to-file.tar.gz")
contents = ""
file.each {|line|
contents << line
}
Saya pikir itu akan cukup untuk mengubahnya menjadi string, tetapi kemudian ketika saya mencoba untuk menulis kembali seperti ini ...
newFile = File.open("test.tar.gz", "w")
newFile.write(contents)
Itu bukan file yang sama. Melakukan ls -l
menunjukkan file memiliki ukuran yang berbeda, meskipun mereka cukup dekat (dan membuka file mengungkapkan sebagian besar konten utuh). Apakah ada kesalahan kecil yang saya buat atau cara yang sama sekali berbeda (tapi bisa diterapkan) untuk mencapai ini?
IO.read
akan menjadi jawaban yang lebih disukai.Jawaban:
Pertama, Anda harus membuka file sebagai file biner. Kemudian Anda dapat membaca seluruh file dalam satu perintah.
Itu akan membuat Anda seluruh file dalam sebuah string.
Setelah itu, Anda mungkin ingin
file.close
. Jika Anda tidak melakukan itu,file
tidak akan ditutup sampai pengumpulan sampah, jadi itu akan menjadi sedikit pemborosan sumber daya sistem saat terbuka.sumber
contents = (contents of file "path to file.txt" as string)
.begin {..open..} ensure {..close..} end
blokcontents = File.binread('path-to-file.tar.gz')
Lihat apidock .File
adalah subkelas dariIO
.Jika Anda memerlukan mode biner, Anda harus melakukannya dengan cara yang sulit:
Jika tidak, lebih pendek dan lebih manis adalah:
sumber
s = File.open(filename, 'rb', &:read)
Untuk menghindari membiarkan file tetap terbuka, yang terbaik adalah meneruskan blok ke File.open. Dengan cara ini, file akan ditutup setelah blok dijalankan.
sumber
pada os x ini sama bagi saya ... mungkinkah ini "ekstra" di windows?
dalam hal apa pun Anda mungkin lebih baik dengan:
sumber
bagaimana dengan keamanan buka / tutup.
sumber
Ruby membaca biner
atau jika kurang dari Ruby 1.9.2
sumber
Anda mungkin bisa menyandikan file tar di Base64. Basis 64 akan memberi Anda representasi ASCII murni dari file yang dapat Anda simpan dalam file teks biasa. Kemudian Anda dapat mengambil file tar dengan mendekode teks kembali.
Anda melakukan sesuatu seperti:
Lihat di Base64 Rubydocs untuk mendapatkan ide yang lebih baik.
sumber
Jika Anda dapat menyandikan file tar dengan Base64 (dan menyimpannya dalam file teks biasa) yang dapat Anda gunakan
atau
untuk mencetak setiap baris (teks) dalam cmd.
sumber