指定したディレクトリにある更新が一番新しいファイルを求める

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を使ってエラー判定すればいいと思う。