Jawaban:
Kelas File Ruby akan memberi Anda seluk beluk ::new
dan ::open
tetapi induknya, kelas IO , masuk ke kedalaman #read
dan #write
.
Apakah Anda mencari yang berikut ini?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
adalah variabel yang menyimpan nama file yang akan ditulis.
f.write
memunculkan Exception.
File.write('filename', 'content')
IO.write('filename', 'content')
Anda dapat menggunakan versi singkat:
File.write('/path/to/file', 'Some glorious content')
Ini mengembalikan panjang yang ditulis; lihat :: tulis untuk detail dan opsi lebih lanjut.
Untuk menambahkan file, jika sudah ada, gunakan:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
Ini adalah pendekatan yang lebih disukai dalam kebanyakan kasus:
File.open(yourfile, 'w') { |file| file.write("your text") }
Ketika blok dilewatkan ke File.open
, objek File akan ditutup secara otomatis ketika blok berakhir.
Jika Anda tidak meneruskan blokir File.open
, Anda harus memastikan bahwa file ditutup dengan benar dan konten ditulis ke file.
begin
file = File.open("/tmp/some_file", "w")
file.write("your text")
rescue IOError => e
#some error occur, dir not writable etc.
ensure
file.close unless file.nil?
end
Anda dapat menemukannya di dokumentasi :
static VALUE rb_io_s_open(int argc, VALUE *argv, VALUE klass)
{
VALUE io = rb_class_new_instance(argc, argv, klass);
if (rb_block_given_p()) {
return rb_ensure(rb_yield, io, io_close, io);
}
return io;
}
File.open
blog.rubybestpractices.com/posts/rklemme/… itu juga disebutkan dalam dokumentasi resmi
Jawaban Zambri yang ditemukan di sini adalah yang terbaik.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
tempat pilihan Anda <OPTION>
adalah:
r
- Baca saja. File harus ada.
w
- Buat file kosong untuk menulis.
a
- Tambahkan ke file. File ini dibuat jika tidak ada.
r+
- Buka file untuk memperbarui membaca dan menulis. File harus ada.
w+
- Buat file kosong untuk membaca dan menulis.
a+
- Buka file untuk membaca dan menambahkan. File dibuat jika tidak ada.
Dalam kasus Anda, w
lebih disukai.
Bagi kita yang belajar dengan contoh ...
Tulis teks ke file seperti ini:
IO.write('/tmp/msg.txt', 'hi')
INFO BONUS ...
Baca kembali seperti ini
IO.read('/tmp/msg.txt')
Seringkali, saya ingin membaca file di clipboard saya ***
Clipboard.copy IO.read('/tmp/msg.txt')
Dan di lain waktu, saya ingin menulis apa yang ada di clipboard saya ke file ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Mengasumsikan Anda memiliki permata clipboard diinstal
IO.write
opsi menimpa konten file alih-alih menambahkan. Tambahkan dengan IO.write agak membosankan.
Errno::ENOENT: No such file or directory @ rb_sysopen
pesan dan file dibuat dengan ukuran 0 byte.
Untuk memusnahkan konten file sebelumnya, lalu tulis string baru ke file:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
Untuk menambahkan file tanpa menimpa konten lamanya:
open('myfile.txt', "a") { |f| f << 'I am appended string' }