この際に、System.IO.Directory.Existsに不正なパスが入力されていてもtrueになっており困っています。
どういう事か言うと
"C:\"=true
"C:\ \ \ \"でもtrueになってしまいます。
また、System.IO.Directory.GetFilesでも"C:\ \ \ \"は問題無く通過してしまい、"C:\ \ \ \pagefile.sys"という値が帰ってきます。
以前スペースのあるパスを正しく生成できないとか判別できないという問題がありましたが、他にもいろいろとあるのですよね。
System.IO.FileInfo クラスでは整形できているので『Windows 的にはこういうパスは不正でないのか?』とも思いましたが、実際にそのパスを利用しようとするとエラーになる不一致がある以上違うような気がします。パスを入力して何かをするようなアプリケーションではパスのチェックは当然しますが、これでは厳密でなくなってしまいます。意地悪なユーザーさんだとこういうテストをしてくるところが恐ろしい。(こういうユーザーは例外を発見すると子供のように喜ぶw)
とはいえ、厳密に Exists メソッドでチェックした直後にファイル処理を実行したとしても、その間に変更がないと保証できないのでファイルの処理では必ず例外処理を実装することが必須です。逆に言えば、上記のような稀な不都合もそこで吸収できるというわけです。よく Exists メソッドでチェック後に何ら例外処理をいれずにファイル処理をしているコードがありますが、ここで使わなくていつ例外処理を使うのかと小一時間(ry
特定のメソッドで自動でブロックが生成されるような言語仕様があれば Java の throws のように促せられるなぁなんて妄想したことがあります。これに限らず属性 (でなくてもいいけど) と IDE の自動生成コードとの連携にもっと容易に手を加えられると、グループ開発でのルールが強制されて楽になれそうな気がします。