From: "岩崎 弘孝" Date: 2006-06-01T11:01:48+09:00 Subject: [ruby-list:42346] Re: ディレクトリーを再帰下降していくスクリプトでNoMemoryErrorエラー 岩崎です。 >こんにちは、なかむら(う)です。 >というわけで、再現のためにもうちょっと情報をいただけますでし >ょうか? >ディレクトリの構成であるとか、実際にどんな処理がその中にある >かとか。 その後調べてみたところ、再帰もネットワークドライブも無関係であって 単にpath全体の長さが256?を超えると問題があるようです。 検証用に作成した簡単なもの(Dir.chdir(長いPath))でテストすると >E:/DOCUME~1/ih000667/bin/tbis/t2.rb:5: [BUG] rb_sys_fail(getcwd) - errno == 0 >ruby 1.8.4 (2005-12-24) [i386-mswin32] 当初のコードは以下のようなもので、Dir.chdir(dir)は通って、 Dir.pwdのことろでNoMemoryErrorエラーとでました。 >def xtree(dir,lev=0,&y) > Dir.chdir(dir) do |dir| > # 自分のサブフォルダーを調べる > subdirs=[] > Dir.glob('*').each do |file| > subdirs.push(file) if FileTest.directory?(file) > end > > pwd=Dir.pwd #ここでNoMemoryErrorエラー > puts ":pwd:#{pwd}" > > yield pwd if lev !=0 > > subdirs.each_with_index do |d,i| > xtree(d,lev+1,&y) > end > end >end 元々WindowsではMAX_PATHの話があるような気がしますが、 Explorerで256以上になるフォルダーを作成しても問題がありません。 Rubyで扱えないのは仕様でしょうか? == Iwasaki == Email: ih000667@mb.taiyokogyo.co.jp