岩崎です。 こんにちは、なかむら(う)さん。 >| 当初のコードは以下のようなもので、Dir.chdir(dir)は通って、 >| Dir.pwdのことろでNoMemoryErrorエラーとでました。 > >何度やっても同じところでNoMemoryErrorでしょうか? 同じフォルダーでテストする場合は同じです。 長さを変えたりしてテストはしておりません。 >| 元々WindowsではMAX_PATHの話があるような気がしますが、 >| Explorerで256以上になるフォルダーを作成しても問題がありません。 >| >| Rubyで扱えないのは仕様でしょうか? > >パス名の長さに関しては、いちおう仕様ということで。 >頑張れば32000文字くらいにできるらしいんですが(NT系の場合)、今 >のところそこで頑張る予定は特にないです。 それは残念です。 普通はそんなに長い名前をつけないのでしょうが、 サーバを利用するユーザがネットワークドライブの割り当てなどを 利用した結果 長い名前になってしまうことはあり得る話です。 都度気にしないといけないのは辛いところですが、プログラム側で ネットワークドライブの割り当てを併用して対処します。 バグっぽいところは宜しくお願いします。 私の場合は以下の例で dirが162bytes dir2が275bytesで NoMemoryErrorがでました。 宜しくお願いします。 ======================================================== #!/usr/bin/ruby -Ks 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 puts ":pwd:#{pwd}" yield pwd if lev !=0 subdirs.each_with_index do |d,i| xtree(d,lev+1,&y) end end end dir='\\\\xxxxxxxx\yyyy....' #適当な長さにしてください。 dir2=dir+'\\'+'zzzz....' #256以上になる長さのフォルダーを事前に用意してください。 xtree(dir) do |path,lev,cnt,subcnt,head| puts "path=#{path}" end