- ベストアンサー
VB6.0フォルダの存在をチェックするには?
Win2000prosp4,VB6.0sp6で指定したフォルダがあるかどうかチェックするにはどうすればよいでしょうか? Dir関数を使えばよいかなと思ったのですが、ヘルプには「パターンと一致するフォルダ名を大文字で戻り値として返す」 とあるのに例えば Msgbox Dir("c:\test") としても表示されるのは""となってしまいます。 フォルダ名の指定の仕方がまずいのかと思い Msgbox Dir("c:\test\") としてみると今度はtestフォルダ内のファイル名が戻り値となってしまいます。 引数がファイル名ならきちんと存在を判定できるのですが、フォルダだとどうすればよいのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まだ回答が締められていないようなので、少しだけ。 Dir関数はあまり信頼性が高くないので、FileSystemObjectを使った方がいいと思われます。 なぜかフォルダ属性を指定してもうまくいかない時があります。 私もそれでずいぶんと悩みました。 なおオブジェクトを作った時は、解放(set xx = nothing)を忘れないように注意してくださいね(メモリリークの原因になります)。
その他の回答 (3)
- takasebou
- ベストアンサー率42% (61/144)
#3です。 ちょっとどういった場合にフォルダを認識できないのか忘れましたが……。Dir関数で使用した場合、コードに誤りがなくともフォルダを認識できない場合があるのは確かです。 オブジェクトを作ってチェックして……が面倒との事ですが。その辺りのファイル操作関連は、どのプログラムでも使えますから、いちどまとめて作ってモジュール化しておけばいいんじゃないでしょうか? 関数の中で、オブジェクト生成-チェック-解放まで一通りするようにしておけば、別にファイルチェックするたびにオブジェクトを作ってどうこうなんて意識せずにすみますしね。 ちなみにOpenは今までの経験上からするとあまり弊害はないので、それでも構わないと思いますw よほど複雑なことをする時以外は私も普通にOpenで開きますし。
お礼
再度ご回答ありがとうございます。 モジュール化すれば確かに楽なのですが、修行中の身ですのでコードは すべて直書きしています。 openは弊害が特にないとのことですので安心しました。
- audittrq
- ベストアンサー率37% (13/35)
第2引数に vbDirectory を記述してみてはどうでしょう? Msgbox Dir("c:\test" , vbDirectory)
お礼
できました! フォルダ属性を設定しなくちゃいけなかったんですね。 どうもありがとうございました。
- kinuyama1002
- ベストアンサー率68% (13/19)
二通りのやり方があります。 案1)フォルダ名の最後の一文字が"\"でなかったら、それを補完してDirに渡す。 案2)Scripting.FileSystemObject.FileExists を使う。-やってみたら、末尾の'\'の有無にかかわらず取れました。 Scripting.FileSystemObject はVB6の場合参照設定で追加するか、或いは、CreateObject で使用するかどちらかです。 参考にMSDNの FileExists の項を載せておきます。
お礼
すみません。補足質問に書き忘れたことがあります。 例えば Dir("c:\test\") としてフォルダ名の最後に\を追加してみるとtestの中にファイルがあった 場合はそのファイル名が返されます。 しかしファイルが存在しなかった場合は""が戻り値になってしまいます。
補足
FileExistsを使うやり方でも解決できました。どうもありがとうございます。 ただ、提示してくださった案1のやり方がよくわかりません。 C:\testというフォルダがあったとして、 Dir("c:\test\") と指定してもやはり戻り値は空白になってしまいます。
お礼
回答ありがとうございました。 Dirだと記述が少なくて使い勝手がいいかなと思っていたのですが、そんな弊害があったのですね。 ファイルのオープン処理でもいまだにFSOではなくOpenを使っています・・・・・・ ファイルを開いて読み込むだけなのにオブジェクト用意して、 またそれを引数にしてオブジェクトを生成して、 というのが面倒なのです(そんなんじゃだめなのはわかっているのですが)