Pages

2010/12/20

Visual Basic 6.0のShell関数で嵌った

このエントリーをはてなブックマークに追加

何故か今頃になりVisual Basic 6.0を絶賛使用中の今日此頃。

出力したデータファイルをマージする処理があり、データファイルの一覧を取得するために

strCommand = "Command.com /C Dir /B " & findString & " > " & listFile
taskID = Shell(strCommand, vbMinimizedNoFocus)

とコードを実装してみた。このときに、findStringにスペースを含まないディレクトリを指定したときには正常にlistFileに検索したファイル名を出力してくれるが、スペースを含むディレクトリを指定したらサイズ0のlistFileを出力してしまう。

勿論のことであるが、findStringにスペースを含むディレクトリを指定した場合は、ディレクトリ名をダブルクォーテーションで括っている。然し何故か正常に動作しない。

悩むこと数時間...。ググッてみたら、Command.comじゃなくて

strCommand = Environ("ComSpec") & " /C Dir /B " & findString & " > " & listFile
taskID = Shell(strCommand, vbMinimizedNoFocus)

上記のようにEnviron関数を使うと間違いないことが判った。因みにEnviron関数だとCommand.comではなくCmd32.exeが起動され、スペースを含むディレクトリでも検索が正常に実行できた。

おい、こら!某300の技を書いた奴、俺の時間を返せと胸の中で罵ったひととき。

0 件のコメント:

コメントを投稿