指定したディレクトリにある更新が一番新しいファイルを求める
globとsort_byを使って(出力はファイル名のみ)。
Dir.chdir("C:\\foo") file = Dir.glob("*.dat").sort_by {|f| File.mtime(f)}.reverse[0] puts file
これでも行けた(出力はフルパス)。
file = Dir.glob("/foo/*.dat").sort_by {|f| File.mtime(f)}.reverse[0] puts file
これだと行けない。
file = Dir.glob("C:\\foo\\*.dat").sort_by {|f| File.mtime(f)}.reverse[0] puts file
条件にマッチするファイルが存在しない場合fileにはnilが入る。Dir#glob()が空の配列を返し、ソートは要素数が0なので実際は何も変更を加えず、返ってきた空配列の先頭要素を取得しようとする挙動。
なので、全部呼び出してからfileを使ってエラー判定すればいいと思う。