• ベストアンサー

VB6.0フォルダの存在をチェックするには?

Win2000prosp4,VB6.0sp6で指定したフォルダがあるかどうかチェックするにはどうすればよいでしょうか? Dir関数を使えばよいかなと思ったのですが、ヘルプには「パターンと一致するフォルダ名を大文字で戻り値として返す」 とあるのに例えば Msgbox Dir("c:\test") としても表示されるのは""となってしまいます。 フォルダ名の指定の仕方がまずいのかと思い Msgbox Dir("c:\test\") としてみると今度はtestフォルダ内のファイル名が戻り値となってしまいます。 引数がファイル名ならきちんと存在を判定できるのですが、フォルダだとどうすればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • takasebou
  • ベストアンサー率42% (61/144)
回答No.3

まだ回答が締められていないようなので、少しだけ。 Dir関数はあまり信頼性が高くないので、FileSystemObjectを使った方がいいと思われます。 なぜかフォルダ属性を指定してもうまくいかない時があります。 私もそれでずいぶんと悩みました。 なおオブジェクトを作った時は、解放(set xx = nothing)を忘れないように注意してくださいね(メモリリークの原因になります)。

tochanx
質問者

お礼

回答ありがとうございました。 Dirだと記述が少なくて使い勝手がいいかなと思っていたのですが、そんな弊害があったのですね。 ファイルのオープン処理でもいまだにFSOではなくOpenを使っています・・・・・・ ファイルを開いて読み込むだけなのにオブジェクト用意して、 またそれを引数にしてオブジェクトを生成して、 というのが面倒なのです(そんなんじゃだめなのはわかっているのですが)

その他の回答 (3)

  • takasebou
  • ベストアンサー率42% (61/144)
回答No.4

#3です。 ちょっとどういった場合にフォルダを認識できないのか忘れましたが……。Dir関数で使用した場合、コードに誤りがなくともフォルダを認識できない場合があるのは確かです。 オブジェクトを作ってチェックして……が面倒との事ですが。その辺りのファイル操作関連は、どのプログラムでも使えますから、いちどまとめて作ってモジュール化しておけばいいんじゃないでしょうか? 関数の中で、オブジェクト生成-チェック-解放まで一通りするようにしておけば、別にファイルチェックするたびにオブジェクトを作ってどうこうなんて意識せずにすみますしね。 ちなみにOpenは今までの経験上からするとあまり弊害はないので、それでも構わないと思いますw よほど複雑なことをする時以外は私も普通にOpenで開きますし。

tochanx
質問者

お礼

再度ご回答ありがとうございます。 モジュール化すれば確かに楽なのですが、修行中の身ですのでコードは すべて直書きしています。 openは弊害が特にないとのことですので安心しました。

  • audittrq
  • ベストアンサー率37% (13/35)
回答No.2

第2引数に vbDirectory を記述してみてはどうでしょう? Msgbox Dir("c:\test" , vbDirectory)

tochanx
質問者

お礼

できました! フォルダ属性を設定しなくちゃいけなかったんですね。 どうもありがとうございました。

回答No.1

二通りのやり方があります。 案1)フォルダ名の最後の一文字が"\"でなかったら、それを補完してDirに渡す。 案2)Scripting.FileSystemObject.FileExists を使う。-やってみたら、末尾の'\'の有無にかかわらず取れました。 Scripting.FileSystemObject はVB6の場合参照設定で追加するか、或いは、CreateObject で使用するかどちらかです。 参考にMSDNの FileExists の項を載せておきます。

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsmthfileexists.asp
tochanx
質問者

お礼

すみません。補足質問に書き忘れたことがあります。 例えば Dir("c:\test\") としてフォルダ名の最後に\を追加してみるとtestの中にファイルがあった 場合はそのファイル名が返されます。 しかしファイルが存在しなかった場合は""が戻り値になってしまいます。

tochanx
質問者

補足

FileExistsを使うやり方でも解決できました。どうもありがとうございます。 ただ、提示してくださった案1のやり方がよくわかりません。 C:\testというフォルダがあったとして、 Dir("c:\test\") と指定してもやはり戻り値は空白になってしまいます。

関連するQ&A

  • コマンドプロンプトによるフォルダ内のファイル存在有無

    バッチ処理で、特定のフォルダ内(配下にフォルダとファイルが混在している)でファイルだけの存在有無を調べて、ファイルが存在している場合とファイルが存在していない場合で処理を別々に行わせようとしたいのですが、ファイルの存在有無はどのようにコマンドで調べれば良いでしょうか? DIR C:\test\*.* でファイルを調べて、ERRORLEVELでif判定させようと思っているのですが、 DIRコマンドでこれを行うと、フォルダまで表示されます。 どのようにしたら良いのでしょうか?教えてください。

  • ファイル/フォルダアドレスの取得と区別

    VB6 ファイル/フォルダのアドレスを取得してファイル/フォルダの区別を したいのですが、特定の物(サーバー内)がエラーしてしまいます。 リストへ"OLEDragDrop"した時に下記実行させています。 MsgBox Data.Files(1) MsgBox GetAttr(Data.Files(1)) MsgBox Dir(Data.Files(1)) MsgBox Dir(Data.Files(1), vbDirectory) エラーの対象 AとB & 問題無い C A>ファイルの種類:Windows Server A>アドレス:\\server B>コンピューターの種類:Windows Server B>アドレス:\\server\TestB C>ファイルの種類:ファイルフォルダ C>アドレス:\\St_server\TestB\TestC Aは全てエラー >実行時エラー'461': >データの形式が一致しません。 Bはアドレスは取得出来て"Dir"でエラー (GetAttr = 16) >実行時エラー'52': >ファイル名または番号が不正です。 Bはアドレスを取得出来てるのでエラー処理で なんとかなりそうなのですが、Aはアドレスすら取得出来ません。 Aのアドレスを取得するにはどうしたら良いでしょうか? (サーバーは社内管理していて詳しくありません)

  • VBでのAPI

    いつもお世話になっています。 今回初めて、APIを使うVBのプログラミングをしているんですが、サーバからのファイル名取得でつまずいています。 long型変数 = FtpFindFirstFile(セッション番号, ディレクトリパス, str型変数, 0, 0) って感じで、何かしらファイルが存在するかどうかは戻り値で判定できるのですが、ファイル名自体が取得できません。(複数ファイルが存在するときは、どれか一つのファイル名が取得できれば問題ないです) いろんなサイトを調べたのですが、「引数の文字列変数に"情報"が取得される」ようなふうに書かれており、はっきりしません。ちなみに私の作成中のPGでは、引数の文字列変数は何も格納なれない状態です。 どなたか詳しい方、教えてくれませんか?

  • フォルダの中身がカラか調べる

    vbaです。 フォルダ(新しいフォルダ)を作り、その中にサブフォルダ(Test用フォルダ)を作って --------------------------------------------------------- Sub フォルダの中身がカラか調べる() If Dir("D:\新しいフォルダ\Test用フォルダ\*.*") = "" Then MsgBox "カラです" Else MsgBox "カラではありません" End If End Sub --------------------------------------------------------- を実行すると、新しいフォルダの中にフォルダがあるのに、 「カラです」が表示されてしまいます。 新しいフォルダのファイルサイズは0です。 If Dir("D:\新しいフォルダ\Test用フォルダ\*.*") = "" Then のコードは、フォルダの中のファイル数ではなく、 フォルダのサイズを取得してしまうのでしょうか?

  • VB6.0 FileListBoxでフォルダ表示

    VB6.0 ファイルシステムコントロールを使用して各ListBox (DriveList/DriList/FileList)を組み合わせています。 この内、DriListで選択したフォルダのファイル表示に File1.Path = Dir1.Path をDir1のChange時に入れています。 このままだと、Dir1選択でFile1にファイルのみが表示されます。 これをこの中に含まれるフォルダも表示させることは 出来ないでしょうか? ご教授願います。 (ステートメントなどを記述していただけると助かります)

  • Windows漢字フォルダ名の扱い(その2)

    先回に引き続きお伺いします。 ■フォルダツリー体系が次のようになっているとき、 D:\TEMP ├─フォルダ名の末尾に機能 │ test1.txt ├─フォルダ名の末尾に表 │ test2.txt ├─途中に機能がある │ test3.txt └─途中に表がある test4.txt ■次のスクリプトを処理させるのですが、 #!perl use strict; &subdir($ARGV[0]); sub subdir { my($dir) = $_[0]; opendir(DIR,"$dir") || die "'$dir' $! stopped"; foreach(sort readdir(DIR)){ next if(/^\.+/); # '.' '..' はパス if(-f "$dir\\$_"){ print "'$dir\\$_'\tはファイルです\n"; }elsif(-d "$dir\\$_"){ print "'$dir\\$_'\tはフォルダです\n"; &subdir("$dir\\$_"); }else{ print "'$dir\\$_'\tは何ですか?\n";#出て欲しくない } } closedir(DIR); } ■結果は、次のようになります。 (※フォルダ名の末尾に特殊な漢字コードがある所が判定できない) C:\>test.pl d:\temp 'd:\temp\フォルダ名の末尾に機能' は何ですか? 'd:\temp\フォルダ名の末尾に表' は何ですか? 'd:\temp\途中に機能がある' はフォルダです 'd:\temp\途中に機能がある\test3.txt' はファイルです 'd:\temp\途中に表がある' はフォルダです 'd:\temp\途中に表がある\test4.txt' はファイルです 先回、色々と教わったこと use encoding "Shift_JIS"; や 局所的に $dir を decodeさせるなどしても上手く行きません。良い方法があれば教えてください。

    • ベストアンサー
    • Perl
  • VBAの「Dir」コマンドを使用してフォルダ名変換を行ったのですが。。

    OS:Windows2000 VBA:Excel2003 任意のフォルダを指定し、そのフォルダ内のフォルダ名を全て変換するものを作成しようとしました。 問題点は、「Dir」関数を使用して、任意のフォルダ内のディレクトリを取得する時に、 strFName = Dir("C:\test\", vbDirectory) 上記のコードを実行すると、strFNameには「.」が入ってます。 strFName = Dir() を繰り返し行うと、strFNameには以下 「.」→「..」→「test01」→「test02」… となります。 C:\test\フォルダには「test01」以降のフォルダは存在するのですが、「.」及び「..」は見当たりません。 コマンドプロンプトで、 C:\test>dir で確認すると、「.」「..」が存在します。 しかし、 C:\test>tree では「.」「..」は見当たりません。 このDir("C:\test\", vbDirectory)で取れてくる「.」「..」とは一体何なのでしょうか? カテゴリ違い(Windows OS かも…)の質問かもしれませんが、ご存知の方がいらっしゃいましたら、よろしくお願いします。

  • インターネットキャッシュフォルダについて教えて

    IEのインターネットキャッシュフォルダの 「C:\Temporary Internet Files」のようなものなのですが、 普通のフォルダとは性質が違うようで、ファイルの扱い方に困っています。 上記のパスをエクスプローラーで開くと、アクセスしたサイトの オブジェクトが一覧として現れるのですが、 上記のフォルダを指定してDir関数でファイルを表示しようとすると ファイル名が表示されません。 またエクスプローラでそのフォルダにはサブフォルダは表示されないのですが、 「C:\Temporary Internet Files\Content.IE5」と指定してDir関数で 一覧を表示させると、サブフォルダやファイルが見つかります。 「C:\Temporary Internet Files」をエクスプローラで表示した時に現れる一覧をVB.NETのプログラム上で取得して、 エクスプローラーで表示されているような、インターネットアドレス、サイズ、最終アクセス日などを取得したいのですが、 どのような方法でやれば良いでしょうか? 特殊なフォルダのようでどうしたら良いか全く分からない状態です。 検索をしてみたのですが、キャッシュを削除するというのはいくつか 見つかったのですが、それ以外では参考になりそうなものを見つけることができませんでした。 申し訳ございませんが、ご教示頂きたくお願いいたします。

  • VB2005 でパス名が誤っていないかチェックする方法について

    VB2005 の初心者です。 iniファイルで指定したフォルダ(パス)を読み込んで処理をしたいのですが、指定したパスが誤っている場合は、どのようにチェックすれば良いのでしょうか。 下記サンプルのとおり、System.IO.Path.GetInvalidPathChars() でチェックする方法があるようですが、ヘルプには「ファイル名やディレクトリ名としては無効なすべての文字が含まれるかどうかは、保証されません。」とあるようです。 実際、"Cd:\<>Work\Test.txt" というパスにすると、チェックはスルーしてしまいました。 Dim filepath As String = "C:\<>Work\Test.txt" Dim invalidPathChars As Char() = System.IO.Path.GetInvalidPathChars() For Each invalidChar As Char In invalidPathChars If filepath.IndexOf(invalidChar) > -1 Then Console.WriteLine("使用できない文字 " & invalidChar.ToString() & " が含まれています。") End If Next 誤ったパスを完全にチェックする方法はあるのでしょうか。 何かヒントになることでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • [VB2008]ファイル存在確認について

    質問です。VB2008を使ってる者ですが、以下のソースが分りません。 例で言います。 最初に以下のファイル存在を確認します。 C:\TEST\test1.txt C:\TEST\test2.txt C:\TEST\test3.txt 全て存在する ここまでは良いのですが、この後 例えば C:\TEST\test1.txt C:\TEST\test2.txt C:\TEST\test3.txt C:\TEST\test4.txt ←これ(これ) ファイルの存在確認で同じフォルダ("TEST")に 存在確認の必要としない不要ファイル("これ")を検出して 削除したいのですが、方法が分りません。 "これ"の不要ファイルの名前は、必ずしも"test4"では無い 存在チェック以外の不要ファイルを削除したいのです。 Dim checkFile As String = "C:\Work\Test.txt" If System.IO.File.Exists(checkFile) Then Console.WriteLine("ファイルが存在します") Else Console.WriteLine("ファイルが存在しせん") End If 上記の後、必要の無いファイルを検出して削除するには どうすれば良いでしょうか? 凄く困ってるので、教えて下さい