OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

実行画面が消えてしまう?

  • 困ってます
  • 質問No.220786
  • 閲覧数203
  • ありがとう数1
  • 気になる数0
  • 回答数5
  • コメント数0

WindowsXP、VB6.0でデレクトリをTreeViewに表示するプログラムです。
フォームにTreeViewコントロールとコマンドボタンを貼り付け、
下記のプログラムを実行します。
curFolder.Name に "System Volume Information" がでると
エラーになり、それを回避するために "On Error Resume Next"をいれて
EXEファイルを作り、実行するとフォームが消えてしまいます。
どなたか教えて下さい。

Private Sub Command1_Click()
' Microsoft Scripting Runtime を参照設定する。
Dim item1 As Node, FsoObj As New scripting.FileSystemObject
Set item1 = TreeView1.Nodes.Add(, , , "c:")
Call SearchFolder(FsoObj.GetFolder("c:\"), item1)
End Sub

Private Sub SearchFolder(NextFolder As scripting.Folder,
              itemX As Node)
On Error Resume Next
Dim TreeItem As Node, curFolder As scripting.Folder
For Each curFolder In NextFolder.SubFolders
' Debug.Print curFolder.Path
Set TreeItem = TreeView1.Nodes.Add(itemX.Index,
               tvwChild, , curFolder.Name)
Call SearchFolder(curFolder, TreeItem)
Next
End Sub
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル12

ベストアンサー率 40% (230/562)

このフォルダにはインデックスサービスを利用してファイル検索を高速にするための情報が入っているようです。
しかし、この中身を勝手に参照されると困るようで、アクセス制御によってどんなファイルが入っているかはもちろん、このフォルダの作成日時なども見られないようになっています。
管理者は無理矢理このフォルダの内容を見ることができますが、やめたほうがいいでしょう。
よって、このフォルダの中身を参照しようとすると、VBの場合実行時エラーが発生します。

これは、おそらくFileSystemObjectを使っているのが原因で、このオブジェクトはフォルダ名を参照するだけでもそのフォルダの情報を取得しようとしている可能性があります。
API関数なら "参照できませんでした、はい残念" で済むのですが、VBコンポーネントの場合、外側でOn Error Resume Nextを指定しても中まで届かないことがあるみたいです。

API関数を使う方法を知っていますか?

WIN32_FIND_DATA
FindFirstFile
FindNextFile
FindClose

これらのキーワードで検索してみてください。
お礼コメント
noname#1504

回答有難う御座います。
TreeViewにすべてのフォルダを表示するには、フォルダの再帰検索を
しなければなりませんが、Dir関数を使って無理やり再帰検索すると
かなり面倒なプログラムになります。
このMicrosoft Scripting Runtimeを参照設定して、FileSystemObjectを
使うと嘘のように簡単になるので、「これはいい!」と
思ったのですが.....。 駄目なようですね。
そのAPI関数を使うか、あるいはVBでフォルダの再帰検索をすると
かなり時間がかかるので、VC++でフォルダ再帰検索のActiveXを作って
そのOCXを参照設定するか、これから検討してみます。
大変参考になりました。有難うございました。
投稿日時 - 2002-02-20 20:01:13
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル13

ベストアンサー率 59% (729/1235)

>' Debug.Print curFolder.Path MsgBox curFolder.Path にしてみては? ...続きを読む
>' Debug.Print curFolder.Path

MsgBox curFolder.Path にしてみては?
補足コメント
noname#1504

>MsgBox curFolder.Path にしてみては?

早速の回答、有難うございます。
' Debug.Print curFolder.Path はどんなファイルをアクセスした時に
エラーになるのかを確認するためにいれてあります。実行ファイル作成時は
コメントにしています。
VBのデバッグ環境では正常に動作しますが、EXEファイルを
実行した時に、多分エラーになるファイルをアクセスした時に
消えてしまうのではないかと思っています。このような事は初めてなので
とまどっています。
投稿日時 - 2002-02-19 14:11:11
  • 回答No.2
レベル13

ベストアンサー率 59% (729/1235)

>EXEファイルを実行した時に、多分エラーになるファイルをアクセスした時に >消えてしまうのではないかと思っています。 それなら、MsgBox curFolder.Pathを入れることにより、エラーになるファイル を含むフォルダを特定できるのでは? ...続きを読む
>EXEファイルを実行した時に、多分エラーになるファイルをアクセスした時に
>消えてしまうのではないかと思っています。

それなら、MsgBox curFolder.Pathを入れることにより、エラーになるファイル
を含むフォルダを特定できるのでは?
補足コメント
noname#1504

>それなら、MsgBox curFolder.Pathを入れることにより、
>エラーになるファイルを含むフォルダを特定できるのでは?

再度の回答、有難う御座います。

最初の質問に書きましたが "System Volume Information" をアクセスした
時にエラーになるようです。何かシステムに関係あるファイルのようで
Cドライブにも、Dドライブにもあります。何故このフォルダ(?)を
アクセスした時にエラーになるのか、あるいはこのフォルダ(?)を
アクセスしないようにすれば、実行画面が消えないのでは....と
思いますがそれが分かりません。
投稿日時 - 2002-02-19 16:35:43
  • 回答No.3
レベル13

ベストアンサー率 59% (729/1235)

if(curFolder.Path = "System Volume Information")then else end if ...続きを読む
if(curFolder.Path = "System Volume Information")then
else
end if
補足コメント
noname#1504

>if(curFolder.Path = "System Volume Information")then
>else
>end if

回答有難うございます。
上記のサンプルを実行してみましたが、"For Each ....." の所で
"書き込み出来ません"のエラーが出て駄目でした。
投稿日時 - 2002-02-19 18:56:05
  • 回答No.5
レベル12

ベストアンサー率 40% (230/562)

VCでOCXを作る力があるくらいなら、VBからAPIでファイルリストを作ることも簡単でしょう。 >かなり時間がかかるので じつは、FileSystemObjectは、あまり効率のいい構造はしていないみたいです。 フォルダやファイル1つ1つが固有のオブジェクトになっているため、検索のたびにそれぞれがインスタンスを作るので、余計なメモリも消費されているようです。 FindFirstFil ...続きを読む
VCでOCXを作る力があるくらいなら、VBからAPIでファイルリストを作ることも簡単でしょう。

>かなり時間がかかるので
じつは、FileSystemObjectは、あまり効率のいい構造はしていないみたいです。
フォルダやファイル1つ1つが固有のオブジェクトになっているため、検索のたびにそれぞれがインスタンスを作るので、余計なメモリも消費されているようです。

FindFirstFileは作成時間や属性なども同時に取得してくれるので、エクスプローラの様なアプリケーションを作るために必要な情報は、一通りそろっています。
それでも、FileSystemObjectの10倍くらい速いみたいです(根拠なし)。

楽してインターフェースから作り始めるのもいいですが、内部からごりごり作っていくのもおもしろいですよ。
がんばってください。
補足コメント
noname#1504

有難うございます。
>VCでOCXを作る.......。
などと表面だけ見ると、いかにも実力がありそうにみえますが実際は
参考書とのにらみ合いになるでしょう。
投稿日時 - 2002-02-20 20:31:57
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ