[ruby-list:49297] Re: Windowsでの波ダッシュファイル名の取得

From: IZUMI HIROAKI <izumi@...>
Date: 2013-03-25 14:25:17 UTC
List: ruby-list #49297
和泉です。

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
#<Encoding:UTF-8>
[:fname, "X\u301CZ.txt", true]
[:dname, "\u3042\u301C\u304A", true]
[:glob, "tp00.rb", #<Encoding:UTF-8>, true]
[:glob, "X\u301CZ.txt", #<Encoding:UTF-8>, true]
[:glob, "\u3042\u301C\u304A", #<Encoding:UTF-8>, true]
[:foreach, ".", #<Encoding:Windows-31J>, true]
[:foreach, "..", #<Encoding:Windows-31J>, true]
[:foreach, "tp00.rb", #<Encoding:Windows-31J>, true]
[:foreach, "X?Z.txt", #<Encoding:Windows-31J>, false]
[:foreach, "あ?お", #<Encoding:Windows-31J>, false]
[:find, ".", #<Encoding:UTF-8>, true]
[:find, "./X?Z.txt", #<Encoding:UTF-8>, false]
[:find, "./tp00.rb", #<Encoding:UTF-8>, true]
[:find, "./あ?お", #<Encoding:Windows-31J>, false]
[:FileSystemObject, "D:\\Testdir\\tp00.rb", #<Encoding:Windows-31J>, 
true]
[:FileSystemObject, "D:\\Testdir\\X?Z.txt", #<Encoding:Windows-31J>, 
false]
[:FileSystemObject, "D:\\Testdir\\あ?お", #<Encoding:Windows-31J>, 
false]
--

デフォルトエンコードで返すのか、Windowsのインタフェースでのコードで返す
かの違いなのかな。
Find#findの結果のエンコードは、自動判別なのかな。
ちょっと分かりにくい仕様ですね。

では。
--
Hiroaki Izumi

In This Thread

Prev Next