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

From: IZUMI HIROAKI <izumi@...>
Date: 2013-03-24 14:43:00 UTC
List: ruby-list #49295
和泉と言います。

Windowsで、UNICODE文字のファイルを作成することができるのですが、
それをDirのインタフェースで取得するには、どうしたらよいのでしょうか?

たとえば、カレントフォルダに、波ダッシュ付きのファイル名を作成し、それ
を
取得するテストスクリプトを作成しました。

--- tp01.rb
fname="X\u301CZ.txt"
fp=open(fname,"w")
fp.close
p [fname, File.exist?(fname)]
Dir.foreach(".") {|n| p [n,n.encoding,File.exist?(n)] }
---

実行結果
---
["X\u301CZ.txt", true]
[".", #<Encoding:Windows-31J>, true]
["..", #<Encoding:Windows-31J>, true]
["X?Z.txt", #<Encoding:Windows-31J>, false]
(略)
---

実行環境は、Windows7 64bit版。rubyは、RubyInstallerで
インストールした
次のバージョンを使用しています。

ruby  -v
ruby 2.0.0p0 (2013-02-24) [x64-mingw32]

エンコーディングの問題だとは思うのですが、解決策がさっぱりわかりません。
OLEを使うスクリプトも試してみました。

-- tp02.rb
require 'win32ole' 
fso = WIN32OLE.new('Scripting.FileSystemObject') 
f = fso.GetFolder('.') 
sf = f.Files 
sf.each {|ssf|
    p [:ssfPath,ssf.Path,File.exist?(ssf.Path)] 
}
-- 結果
[:ssfPath, "D:\\Testdir\\tp01.rb", true]
[:ssfPath, "D:\\Testdir\\tp02.rb", true]
[:ssfPath, "D:\\Testdir\\X?Z.txt", false]
(略)
--

機種依存文字がファイル名にあって、フォルダ一覧を取得するときに、"?"でな
く
そのままのコードを返す方法を教えてください。

以上
--
Hiroaki Izumi 


In This Thread

Prev Next