Ruby'de boş bir dosya oluşturmak: "dokunma" eşdeğeri?


Yanıtlar:


181

FileUtils.touchyaptığı gibi görünür ve * şu touchkomutu yansıtır :

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

* Dokunmadan (1) farklı olarak mtime veya tek başına güncelleme yapamazsınız. Ayrıca birkaç güzel seçeneği daha eksik.


@ 5chdn Parantez olmadan mı demek istiyorsunuz? Evet, yöntem parametrelerinin etrafındaki parensler (bazen) isteğe bağlıdır.
Dave Newton

44

Dosya tanıtıcılarından endişe ediyorsanız:

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

Gönderen docs :

Opsiyonel kod bloğu verilirse, açılan dosya bir argüman olarak aktarılır ve blok sona erdiğinde File nesnesi otomatik olarak kapatılır.


Teşekkürler, yeni dosyayı başka bir işleme gönderiyorum, bu nedenle tanıtıcının hemen kapatılması gerekiyor.
Abhi Beckert

12
Bunun aslında yansıtmadığına dikkat çekmeye değer touch- varsa dosyanın üzerine yazacaktır.
MrTheWalrus

3
Ekleme modunu kullanın ve dosya zaten mevcutsa kesilmeyecektir File.open ("foo.txt", "a") {} Bu aynı zamanda 'touch' ı yansıtmaz, ancak 'touch (1)' soru.
G.Allen Morris III

"A" kullanmak mtime'ı güncellemez. (Alt başlık "dokunma" idi, bu yüzden Google bize Ruby dokunuşu isteyenler getiriyor.)
Martin Dorey

on * nix sistemlerinde, bu şekilde oluşturulduğunda dosya sahibi kimdir?
Islam Azab



-1

Sadece bir örnek:

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

1
Bu, diğer bazı dillerde olduğu gibi, geride açık bir dosya tutamacı bırakıyor mu?
Abhi Beckert

4
@Abhi: Öyle, ama çöp toplama işi bir noktada halledecek. Bundan kaçınmak için boş bir blok
geçin

"Bir noktada" ne zaman olacak? Komut dosyasının sonunda mı yoksa herhangi bir değişkene atanmadığı için hemen mi? Dosyayı, sistemdeki diğer işlemlerin onunla hemen çalışmaya başlayabilmesi için oluşturuyorum ve dosya tanıtıcısı hala yazma için açıksa engellenecekler.
Abhi Beckert

1
File.open ("foo.txt", "w"). Close () dosya tanıtıcısı sorununu çözer, ancak FileUtils.touch daha iyi bir çözümdür.
Michael Campbell

Açık dosya tutamaçlarını böyle bırakmayın :-)
sekmo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.