Membuat file kosong di Ruby: setara "touch"?


119

Apa cara terbaik untuk membuat file kosong di Ruby?

Sesuatu yang mirip dengan perintah Unix, sentuh :

touch file.txt

5
Anda selalu dapat melakukannya`touch file.txt`
Mark Thomas

8
@ Mark: bahkan di windows?
Marc-André Lafortune

1
Orang yang peduli dengan pemrograman independen platform yang tepat? :-)
TJ Biddle

Jawaban:


181

FileUtils.touchterlihat seperti apa yang dilakukannya, dan cermin * yang touchperintah:

require 'fileutils'
FileUtils.touch('file.txt')

* Tidak seperti touch (1) Anda tidak dapat mengupdate mtime atau atime sendirian. Itu juga kehilangan beberapa opsi bagus lainnya.


@ 5chdn Maksud Anda tanpa parens? Ya, tanda kurung di sekitar parameter metode (terkadang) opsional.
Dave Newton

44

Jika Anda khawatir tentang pegangan file:

File.open("foo.txt", "w") {}

Dari dokumen :

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



-1

Contoh saja:

File.open "foo.txt", "w"

1
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 :-)
sekmo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.