From: IZUMI HIROAKI Date: 2013-03-25T23:25:17+09:00 Subject: [ruby-list:49297] Re: Windowsでの波ダッシュファイル名の取得 和泉です。 From whiteleaf <2nd.leaf@gmail.com> : > whiteleaf です。 > とりあえず、Dir.glob("*") (か Dir["*"])なら普通に取得できますね。 ありがとうございます。とりあえず、Dir.glob("*")で対処します。 もう少し確認してみました。 -- tp00.rb # coding: utf-8 p __ENCODING__ fname="X\u301CZ.txt" fp=open(fname,"w") fp.close p [:fname,fname, File.exist?(fname)] dname="\u3042\u301C\u304A" Dir.mkdir(dname) unless File.exist?(dname) p [:dname,dname, File.exist?(dname)] Dir.glob("*") {|n| p [:glob,n,n.encoding,File.exist?(n)] } # Test 1 glob Dir.foreach(".") {|n| p [:foreach,n,n.encoding,File.exist?(n)] } # Test 2 foreach require 'find' Find.find(".") {|n| p [:find,n,n.encoding,File.exist?(n)] } # Test 3 find require 'win32ole' fso = WIN32OLE.new('Scripting.FileSystemObject') # test 4 FileSystemObject sFolder = fso.GetFolder('.') sFolder.Files.each {|ssf| n = ssf.Path p [:FileSystemObject,n,n.encoding,File.exist?(n)] } sFolder.SubFolders.each {|ssf| n = ssf.Path p [:FileSystemObject,n,n.encoding,File.exist?(n)] } -- 結果 D:\Testdir>tp00.rb # [:fname, "X\u301CZ.txt", true] [:dname, "\u3042\u301C\u304A", true] [:glob, "tp00.rb", #, true] [:glob, "X\u301CZ.txt", #, true] [:glob, "\u3042\u301C\u304A", #, true] [:foreach, ".", #, true] [:foreach, "..", #, true] [:foreach, "tp00.rb", #, true] [:foreach, "X?Z.txt", #, false] [:foreach, "あ?お", #, false] [:find, ".", #, true] [:find, "./X?Z.txt", #, false] [:find, "./tp00.rb", #, true] [:find, "./あ?お", #, false] [:FileSystemObject, "D:\\Testdir\\tp00.rb", #, true] [:FileSystemObject, "D:\\Testdir\\X?Z.txt", #, false] [:FileSystemObject, "D:\\Testdir\\あ?お", #, false] -- デフォルトエンコードで返すのか、Windowsのインタフェースでのコードで返す かの違いなのかな。 Find#findの結果のエンコードは、自動判別なのかな。 ちょっと分かりにくい仕様ですね。 では。 -- Hiroaki Izumi