重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

カレントディレクトリにある全てのファイル及びディレクトリの変更時刻を取得したいです。

Dir.foreach('.') do |file|
puts File.ctime(file)
end

そこで、上記Rubyスクリプトを作成し実行しました。

しかし、カレントに.(ドット)から始まるファイルを置いて上記rubyスクリプトを実行すると、
`ctime': No such file or directory - .htaccess (Errno::ENOENT)のエラーになってしまいます。(.htaccessをカレントに置いた例)

Win環境固有のものかと思いますが、なにか対策があるでしょうか?

A 回答 (1件)

バージョンを補足した方がよいでしょう。



私の環境

C:\test>ruby -ve "Dir.foreach('.') {|f| puts \"#{File.ctime(f)} - #{f}\" }"
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
Fri Dec 05 20:59:57 +0900 2008 - .
Thu Jan 01 09:00:00 +0900 1970 - ..
Fri Dec 05 21:00:06 +0900 2008 - .test

この回答への補足

koko_u_さん ご回答ありがとうございます。

まず最初に質問に誤りがありました。すみません。

以下の様に試してみましてみると、問題なく動作しました。

C:\test>ruby -ve "Dir.foreach('.') {|f| puts \"#{File.ctime(f)} - #{f}\" }"
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
Fri Dec 05 21:30:49 +0900 2008 - .
Thu Jan 01 09:00:00 +0900 1970 - ..
Fri Dec 05 21:47:35 +0900 2008 - .test

実は、ファイル”.test”はカレントでなく、一つ上のディレクトリに置いていました。(質問する際の問題事象の切り分けを怠けてしまった。)

以下の様にオペレーションを続けると問題事象が発生しました。

C:\test>mkdir test2

C:\test>cd test2

C:\test\test2>ruby -ve "Dir.foreach('..') {|f| puts \"#{File.ctime(f)} - #{f}\"
}"
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
Sat Dec 06 18:44:43 +0900 2008 - .
Fri Dec 05 21:30:49 +0900 2008 - ..
-e:1:in `ctime': No such file or directory - .test (Errno::ENOENT)
from -e:1
from -e:1:in `foreach'
from -e:1

補足日時:2008/12/06 18:45
    • good
    • 0
この回答へのお礼

自己解決しました(汗

Dir.foreach('..') do |f|
f="../"<<f
puts "#{File.ctime(f)} - #{f}"
end

パスが付いてなかったからです。すみません、お騒がせしました。

お礼日時:2008/12/06 19:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!