DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Directoryクラスので先頭・末尾に空白入りパスの場合

環境/言語:[WindowsXP、VB.Net、.NET Framework1.1]
分類:[.NET]

現在VB.Netにてファイルやフォルダをコピーしたりするアプリを作成中なのですが、DirectoryもしくはDirectoryInfoクラスを使って先頭もしくは末尾が空白のフォルダ・ファイルをコピー、移動、削除などするにしても空白部分が自動でトリムされて認識してしまうようなので空白を保ったままの処理ではエラーが出てしまいます。
※例えば
※Directory.GetFiles("c:\hoge ")
※では実際に"C:\hoge "が存在しても見つけることが出来ません。
現在のところ空白自体は例えばEndsWithなどを使って判別できるので、処理を省くようにして対応はしています。

Directoryクラスの制限を確認すると

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemiodirectoryinfoclasstopic.asp
「入力文字列としてパスを受け入れるメンバでは、そのパスが正しい書式である必要があります。それ以外の場合は、例外が発生します。たとえば、パスが絶対パスであっても空白で始まっている場合、そのパスはクラスのメソッドではトリムされません。このため、パスが正しい書式にならず、例外が発生します。」

とありますので、この制限がある以上、アプローチを変えない限りは空白部分をそのままの形では取り扱うことができないということでしょうか。そしてエクスプローラー上の処理では空白があっても正常に動作しますので、例えばAPIであれば可能となりますでしょうか。
> エクスプローラー上の処理では空白があっても正常に動作します

エクスプローラ上での処理で、前後に空白(半角スペース)は入らないと思う。

> 実際に"C:\hoge "が存在しても見つけることが出来ません。

ということで、これは存在しえないと思う。
> エクスプローラ上での処理で、前後に空白(半角スペース)は入らないと思う。
すいません。全角です。
末尾が全角空白のときは検索ディレクトリパスの末尾に\をつけるのはダメですか?
こんにちは、じゃんぬねっと です。

■No9889に返信(壱丸3さんの記事)
> 末尾が全角空白のときは検索ディレクトリパスの末尾に\をつけるのはダメですか?

全角スペースに関わらず、DirectorySeparatorChar はつけるべきではないでしょうか?
System.IO.Directory の対応はそれで問題ないですよね。

問題は、System.IO.File ですが、これも DirectorySeparetorChar 何かをつけないと、Trim さちゃうので、

 ・「Hoge」
 ・「Hoge_」  (_ は全角スペース)
 ・「Hoge__」 (_ は全角スペース)

これらは、区別できないですね。
付けちゃうと、非常に違和感がありますが。(^-^;)
じゃんぬねっとさん、確かに仰られる通りですね。^^;
フォローありがとうございました。
皆さんありがとうございました。

DirectorySeparatorCharをつけるタイミングを前にずらすことで、ディレクトリの処理に関しては問題が解決しました。
単純にコードの構造上、DirectorySeparatorCharつける前のタイミングで色々やらざるを得なかったというのがそもそもの問題でしたので、全面書き直しして対応できました。

ファイルの場合は今まで通り処理をパスするで対応します。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板