none
日本語ファイル名を取得するには? RRS feed

  • 質問

  • C# (.NET Framework 3.5)で、

    string def_Folder = System.Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\Media";

    string[] files = System.IO.Directory.GetFiles(def_Folder, "*.wav");

    とすると、全てアルファベットのファイル名で取得されます。

    たとえば、エクスプローラーでは「Windows エラー.wav」 が 「Windows error.wav」といった具合です。

    目的は、

    Hashtable listB1_ht = new Hashtable();

    listB1_ht.Add("Windows エラー", "Windows error.wav");

    としたい。

    2011年1月21日 22:16

回答

  • 「Windows error.wav」というのが本来のファイル名で、「Windows エラー.wav」が Desktop.ini で指定された表示用の名前だと思います。

    http://reisato.plala.jp/rsato/weblog/2007/06/17/1414.html

    ためしていませんが、Desktop.ini を読み込めば、日本語のファイル名を取得できるかもしれません。上記のURL先をみたところ、ファイル名は dll の中に埋め込まれているようなので、すごく苦労しそうですが。。。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク 山本春海 2011年2月3日 8:42
    2011年1月21日 23:50
  • シェルが実現できているならシェルにやらせればいいわけです。

    参照の追加で COM の Shell32.dll を参照するようにして、

    1. Shell32.Shell を new
    2. Shell.NameSpace(0) でデスクトップの Folder オブジェクトを取得
    3. Folder.ParseName に windows error.wav のフルパスを渡して、目的の FolderItem オブジェクトを取得
    4. で、あとは Name プロパティとかを参照する。
    • 回答としてマーク 山本春海 2011年2月3日 8:42
    2011年1月22日 6:16

すべての返信

  • 「Windows error.wav」というのが本来のファイル名で、「Windows エラー.wav」が Desktop.ini で指定された表示用の名前だと思います。

    http://reisato.plala.jp/rsato/weblog/2007/06/17/1414.html

    ためしていませんが、Desktop.ini を読み込めば、日本語のファイル名を取得できるかもしれません。上記のURL先をみたところ、ファイル名は dll の中に埋め込まれているようなので、すごく苦労しそうですが。。。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク 山本春海 2011年2月3日 8:42
    2011年1月21日 23:50
  • シェルが実現できているならシェルにやらせればいいわけです。

    参照の追加で COM の Shell32.dll を参照するようにして、

    1. Shell32.Shell を new
    2. Shell.NameSpace(0) でデスクトップの Folder オブジェクトを取得
    3. Folder.ParseName に windows error.wav のフルパスを渡して、目的の FolderItem オブジェクトを取得
    4. で、あとは Name プロパティとかを参照する。
    • 回答としてマーク 山本春海 2011年2月3日 8:42
    2011年1月22日 6:16