Yanıtlar:
Yakut File sınıfı size ins ve çıkışları verecek ::new
ve ::open
ancak ebeveyn, IO sınıfını derinliği içine alır #read
ve #write
.
Aşağıdakileri mi arıyorsunuz?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
, yazılacak dosyanın adını tutan bir değişkendir.
f.write
.
File.write('filename', 'content')
IO.write('filename', 'content')
Kısa sürümü kullanabilirsiniz:
File.write('/path/to/file', 'Some glorious content')
Yazılan uzunluğu döndürür; bkz :: yazma Daha fazla bilgi ve seçenekler için.
Dosyaya eklemek için, zaten varsa, şunu kullanın:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
Çoğu durumda bu tercih edilen yaklaşımdır:
File.open(yourfile, 'w') { |file| file.write("your text") }
Bir blok iletildiğinde File.open
, blok sona erdiğinde File nesnesi otomatik olarak kapatılır.
Bir bloğu File.open
iletmezseniz, dosyanın doğru bir şekilde kapatıldığından ve içeriğin dosyaya yazıldığından emin olmanız gerekir.
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
Belgelerde bulabilirsiniz :
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/... aynı zamanda resmi belgelerinde belirtilen oluyor
Zambri'nin cevabı burada bulundu en iyisidir.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
için seçenekleriniz <OPTION>
:
r
- Sadece oku. Dosya mevcut olmalıdır.
w
- Yazmak için boş bir dosya oluşturun.
a
- Dosyaya ekle. Dosya yoksa oluşturulur.
r+
- Hem okuma hem de yazma için bir dosya açın. Dosya mevcut olmalıdır.
w+
- Hem okuma hem de yazma için boş bir dosya oluşturun.
a+
- Okumak ve eklemek için bir dosya açın. Dosya yoksa oluşturulur.
Sizin durumunuzda, w
tercih edilir.
Örnek olarak öğrenenler için ...
Aşağıdaki gibi bir dosyaya metin yazın:
IO.write('/tmp/msg.txt', 'hi')
İLAVE BİLGİ ...
Bu şekilde tekrar okuyun
IO.read('/tmp/msg.txt')
Sık sık panomuza bir dosya okumak istiyorum ***
Clipboard.copy IO.read('/tmp/msg.txt')
Ve diğer zamanlarda, panomdaki dosyaları bir dosyaya yazmak istiyorum ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Pano mücevher yüklü olduğunu varsayar
IO.write
seçeneğine dikkat edin . IO.write ile biraz sıkıcı.
Errno::ENOENT: No such file or directory @ rb_sysopen
mesaj ve 0 bayt boyutunda oluşturulan dosyayı görebilirsiniz .
Dosyanın önceki içeriğini yok etmek için, dosyaya yeni bir dize yazın:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
Eski içeriğinin üzerine yazmadan bir dosyaya eklemek için:
open('myfile.txt', "a") { |f| f << 'I am appended string' }