none
DirectoryInfo(dirName).FullName と dirName が一致しない RRS feed

  • 質問

  • VB2005でファイルリストを取得するプログラムを書いています。

    Dim di As System.IO.DirectoryInfo

    di = New System.IO.DirectoryInfo(dirName) ※1

    di.GetFiles() ※2

    di.GetDirectorys()

    を繰り返してリストを取得しようとしたところ、

    dirName = "C:\aaa\aaa\aaa\…\○○○○ "

    というような、末尾に全角空白の入ったフォルダだと※1は成功するのに※2で

    「DirectoryNotFoundException」が発生してパスが見つからないと言われてしまいます。

    確認すると、※1の結果の時点で既に

    di.FullName = "C:\aaa\aaa\aaa\…\○○○○"

    di.Name = "○○○○"

    で、末尾の空白が無くなってしまいます。

    dirName の実体フォルダがあること、読み取りOKな状態であることは確認しました。

    この現象の回避策はあるのでしょうか?

    2006年5月7日 13:52

回答

  • 全角空白で終わっている場合は、最後に"\"を付加すれば回避できたと思いますが、これでプログラムはうまく動きますでしょうか? プログラムの作りがわからないのですが、必ず最後に"\"を付加するようにできませんでしょうか?
    2006年5月7日 14:46
    モデレータ

すべての返信

  • 全角空白で終わっている場合は、最後に"\"を付加すれば回避できたと思いますが、これでプログラムはうまく動きますでしょうか? プログラムの作りがわからないのですが、必ず最後に"\"を付加するようにできませんでしょうか?
    2006年5月7日 14:46
    モデレータ
  • ありがとうございます。

    上記対応を施して、回避できるようになりました。

    とりあえず単純に、

    di = new System.IO.DirectoryInfo(dirName & "\")

    にしてしまいました。

    ・・・

    今回ファイルリストを取得しようとしている対象が友人から受け取った

    デジカメ画像やらWord文書やらのデータCDなのですが、

    ファイル名やフォルダ名に半角カナや特殊文字をバリバリ使っていて

    今回もそういった空白文字のゴミ?が紛れたフォルダに対して

    処理して判明しました。

    他にも苦手な文字があるんでしょうかDirectoryInfo(というかFileSystemInfo)

    2006年5月7日 15:35
  • というか、.NETのファイル名(パス)の考え方が、NTFSとも、FATとも、その他とも微妙に異なる解釈をします。

    現状ではなかなか難しい問題です。

    WinFSでもしかしたら解決しないかなと期待はしています。

    2006年5月7日 15:53
  • なるほど、処理を適用する環境にかなり左右されるワケですか。
    今回の開発ソフトは古いWindowsにも使いそうなので、デバッグの際にファイルシステムの違いも念頭に入れるようにしてみます。

    ・・・まあ、実際に遭遇した場合はぜんぜん違う原因からデバッグを始めそうで悲しいですが(苦笑
    2006年5月8日 14:45