Gibt es eine einzige Möglichkeit, um festzustellen, ob ein Verzeichnis / eine Datei / ein Symlink / etc. Entität (allgemeiner) existiert?
Ich benötige eine einzelne Funktion, da ich ein Array von Pfaden überprüfen muss, bei denen es sich um Verzeichnisse, Dateien oder Symlinks handeln kann. Ich weiß, File.exists?"file_path"
funktioniert für Verzeichnisse und Dateien, aber nicht für Symlinks (was ist File.symlink?"symlink_path"
).
true
wenn der Symlink vorhanden ist, unabhängig davon, ob er letztendlich in einen Nicht-Symlink aufgelöst werden kann. Dh es sollte auchtrue
für defekte Links zurückkehren.File.exists?
wird nurtrue
für einen Symlink zurückgegeben, der nicht defekt ist.Antworten:
Das Standard-Dateimodul verfügt über die üblichen verfügbaren Dateitests :
RUBY_VERSION # => "1.9.2" bashrc = ENV['HOME'] + '/.bashrc' File.exist?(bashrc) # => true File.file?(bashrc) # => true File.directory?(bashrc) # => false
Sie sollten dort finden können, was Sie wollen.
Offensichtlich nicht. Ok, versuchen Sie etwas wie:
def file_dir_or_symlink_exists?(path_to_file) File.exist?(path_to_file) || File.symlink?(path_to_file) end file_dir_or_symlink_exists?(bashrc) # => true file_dir_or_symlink_exists?('/Users') # => true file_dir_or_symlink_exists?('/usr/bin/ruby') # => true file_dir_or_symlink_exists?('some/bogus/path/to/a/black/hole') # => false
quelle
ENV['HOME'] + '/.bashrc'
) durchzuführen, die möglicherweise nicht plattformübergreifend funktioniert. Sie sollten Ruby File Joins verwenden und auch,Rails.root
wenn Sie Rails verwenden.File.exists?(Rails.root.join('db', 'my_seeds.csv')
/
ist jedoch nicht das Problem, da Rubys E / A unter Windows automatisch von Schrägstrichen in Schrägstriche umgewandelt wird .bash
in das Startmenü tippen und im resultierenden Konsolenfenstercat ~/.bashrc
eine Ausgabe erzeugen. ¯ \ _ (ツ) _ / ¯Warum definieren Sie nicht Ihre eigene Funktion
File.exists?(path) or File.symlink?(path)
und nutzen diese?quelle