Jika blok kode opsional diberikan, itu akan melewati file yang dibuka sebagai argumen, dan objek File akan secara otomatis ditutup ketika blok berakhir.
Terima kasih, saya mengirim file baru ke proses lain, jadi pegangannya harus segera ditutup.
Abhi Beckert
12
Perlu diperhatikan bahwa ini tidak benar-benar mencerminkan touch- ini akan menimpa file jika ada.
MrTheWalrus
3
Gunakan mode tambahkan dan file tidak akan terpotong jika sudah ada File.open ("foo.txt", "a") {} Ini juga tidak mencerminkan 'sentuh', tetapi kemudian 'sentuh (1)' tidak pertanyaan.
G. Allen Morris III
Menggunakan "a" tidak memperbarui mtime. ("touch" adalah subtitle, jadi Google menghadirkan orang-orang yang menginginkan sentuhan Ruby.)
Martin Dorey
pada sistem * nix, Siapakah pemilik file saat dibuat dengan cara ini?
Islam Azab
24
Di Ruby 1.9.3+, Anda dapat menggunakan File.write(alias IO.write):
Apakah ini meninggalkan pegangan file yang terbuka, seperti yang terjadi dalam beberapa bahasa lain?
Abhi Beckert
4
@Abhi: Ya, tetapi pengumpulan sampah akan menanganinya di beberapa titik. Untuk menghindarinya, lewati blok kosong (Lihat jawaban Michael Kohl)
Marc-André Lafortune
Kapan "pada suatu saat" akan terjadi? Di akhir skrip, atau langsung karena belum ditetapkan ke variabel apa pun? Saya membuat file agar proses lain di sistem dapat segera mulai bekerja, dan proses tersebut akan diblokir jika pegangan file masih terbuka untuk ditulis.
Abhi Beckert
1
File.open ("foo.txt", "w"). Close () memecahkan masalah filehandle, tetapi FileUtils.touch adalah solusi yang lebih baik.
Michael Campbell
Jangan biarkan file terbuka menangani seperti itu :-)
`touch file.txt`
Jawaban:
FileUtils.touch
terlihat seperti apa yang dilakukannya, dan cermin * yangtouch
perintah:* Tidak seperti touch (1) Anda tidak dapat mengupdate mtime atau atime sendirian. Itu juga kehilangan beberapa opsi bagus lainnya.
sumber
Jika Anda khawatir tentang pegangan file:
Dari dokumen :
sumber
touch
- ini akan menimpa file jika ada.Di Ruby 1.9.3+, Anda dapat menggunakan
File.write
(aliasIO.write
):Untuk versi sebelumnya, baik
require "backports/1.9.3/file/write"
atau gunakanFile.open("foo.txt", "w") {}
sumber
Dan juga, kurang menguntungkan, tapi sangat singkat:
sumber
Contoh saja:
sumber