Belirli bir dizinin Ruby'de olup olmadığını kontrol etme


163

Otomatik olarak teslim veya belirli bir dizinin var olup olmamasına göre bir Subversion URL güncelleştiren bir komut dosyası yazmaya çalışıyorum.

Nedense, kodum çalışmıyor ve yanlış olsa bile her zaman true döndürür :

def directory_exists?(directory)
  return false if Dir[directory] == nil
  true
end

Neyi yanlış yapıyorum?

Yanıtlar:


287

Aradığınız dosyanın yalnızca bir dosya değil , bir dizin olup olmadığı önemliyse, File.directory?veyaDir.exist? . Bu yalnızca dosya varsa ve bir dizinse true değerini döndürür.

Bir yana, yöntemi yazmanın daha deyimsel bir yolu, Ruby'nin yöntem içindeki son ifadenin sonucunu otomatik olarak döndürmesinden faydalanmak olacaktır. Böylece şöyle yazabilirsiniz:

def directory_exists?(directory)
  File.directory?(directory)
end

Mevcut durumda bir yöntem kullanmanın gerekli olmadığını unutmayın.


139
Neden başka bir yöntemin içine bile sokasınız ki? Sadece doğrudan ara!
Ryan Bigg

11
@ Radar Soyulmuş aşağı yöntemin muhtemelen soru amacıyla basitleştirildiğini ve gerçek yöntemin bazı ek mantık içerebileceğini düşündüm. Eğer yöntemde başka mantığa gerek yoksa, katılıyorum. Elbette, sadece dizin çalıştırmak? direkt olarak.
Emily

4
Bundan Dir.exists?daha temiz olmaz mıydı File.directory??
Yo Ludke

3
Dir.exists?kullanımdan kaldırıldı, kullanınDir.exist
fkoessler

4
@burningpony benim kötü, buDir.exist?
fkoessler

42

Şöyle de kullanabilirsiniz Dir::exist?:

Dir.exist?('Directory Name')

true'Dizin Adı' bir dizinse döndürür , falseaksi takdirde. 1


2
Bu Ruby> 1.9 ya da öylesine gerektirir gibi görünüyor, 1.8'de geri dönüyor undefined method `exists?' for Dir:Class (NoMethodError). Ayrıca, çoğul form artık kullanımdan kaldırıldı, .exist?bunun yerine kullanın.
Josip Rodin

40

Diğer tüm yanıtlar doğrudur, ancak kullanıcının ana dizinindeki dizini kontrol etmeye çalışıyorsanız sorun yaşayabilirsiniz. Kontrol etmeden önce göreli yolu genişlettiğinizden emin olun:

File.exists? '~/exists'
=> false
File.directory? '~/exists'
=> false
File.exists? File.expand_path('~/exists')
=> true

18
File.exist?("directory")

Dir[]bir dizi döndürür, bu yüzden asla olmayacaktır nil. Eğer kendi yolunda yapmak istiyorsan, yapabilirsin

Dir["directory"].empty?

hangi dönecektir trueo eğer değildi bulundu.


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.