■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#7415-0Dir関数でサブフォルダも調べるには目黒2000-02-08(火) 10:59
     #7435-0RE#7415:Dir関数でサブフォルダも調べるには藤代千尋2000-02-08(火) 15:01
     #7444-0RE#7435:Dir関数でサブフォルダも調べるには目黒2000-02-08(火) 17:22
#7415-0
Dir関数でサブフォルダも調べるには
1つのフォルダに中に、いくつかフォルダがありその中のファイルを読み込むときに、
Dir関数を使って、それをやろうと思ったのですが、
1つ目のフォルダの処理が終わって、2つ目のフォルダを探すのに、
MyName = Dirとすると、エラーが起きてしまいます。
なにか良い方法はないでしょうか?宜しくお願いします。
------------------
    MyDPath = SearchDir & "\"
    MyDName = Dir(MyDPath, vbDirectory)
    Do While MyDName <> ""
        If MyDName <> "." And MyDName <> ".." Then
            If (GetAttr(MyDPath & MyDName) And vbDirectory) = vbDirectory Then
                MyPath = MyDPath & MyDName
                MyName = Dir(MyPath & "\*.*")
                Do While MyName <> ""
                    [処理]
                    MyName = Dir
                Loop
            End If
        End If
        MyDName = Dir
    Loop
#7435-0
RE#7415:Dir関数でサブフォルダも調べるには
> 1つのフォルダに中に、いくつかフォルダがありその中のファイルを読み込むときに、
> Dir関数を使って、それをやろうと思ったのですが、
> 1つ目のフォルダの処理が終わって、2つ目のフォルダを探すのに、
> MyName = Dirとすると、エラーが起きてしまいます。
> なにか良い方法はないでしょうか?宜しくお願いします。

Dir は、ネストに対応していません。サブフォルダを調べた段階で、前の Dir はリセットされます。
そのあとの Dir は空なので、エラーになっています。

対策としては、以下のようになります。
1.フォルダを取得したら配列などに保存して、
 すべてのファイルを処理してから、フォルダを処理する
2.ネストに対応した FindFile WindowsAPI をつかう
3.File System Object をつかう

1.の方法は、余分のメモリを使うので、フォルダの階層が深くなると、メモリ不足でエラーが起こる
かもしれません。また、コーディングの手間もかかります。

2.の方法は、今とほとんど同じ構文で処理できるので便利は便利です(Dir と FindFile はほぼ
同じ)。ただし、WindowsAPI なので、それなりの覚悟をする必要があります。

3.の方法は VB6 で使用できます。フォルダを指定すれば、その中のファイルを単にループで処理で
きますし、サブフォルダも同様です。この方法が一番良く、これからの手法なので今学んでおくのも
良いでしょう。ただし、コードは1から作り直しになります。File System Object については、ヘ
ルプや過去ログを参照してください。
#7444-0
RE#7435:Dir関数でサブフォルダも調べるには
ありがとうございました。
APIはちょっとわかんなそうなので、1番の配列のでやってみました。

配列の使い方がよくわからなかったのですが、使い方はこんな感じでOKでしょうか?

Dim Directory() as String
------------
    MyDPath = [FilePath] & "\"
    MyDName = Dir(MyDPath, vbDirectory)
    Do While MyDName <> ""
        If MyDName <> "." And MyDName <> ".." Then
            If (GetAttr(MyDPath & MyDName) And vbDirectory) = vbDirectory Then
                DCnt = DCnt + 1
                ReDim Preserve Directory(DCnt)
                Directory(DCnt) = MyDName
            End If
        End If
        MyDName = Dir
    Loop
    For i = 1 To DCnt
        MyPath = [FilePath] & "\" & Directory(i)
        MyName = Dir(MyPath & "\*.*")
        ImgEdit1.FitTo 0
        Do While MyName <> ""
            [処理]
            MyName = Dir
        Loop
    Next i
このページと関連する記事:
#5639-0フォルダの一覧表作成について1999-09-22(水) 10:26
#24209-0フォルダ内のファイルを取得したいです。2000-06-26(月) 11:44
#2286-0ファイル名の取得方法1999-10-13(水) 19:51
#35866-0フォルダの中にあるサブフォルダ名の取得2000-12-22(金) 17:03
#8180-0メニューにサブメニューを追加2000-05-22(月) 18:15
#44601-0バックアップツールを作ろうと思うのですが。2001-07-01(日) 22:36
#43190-0Dir関数でフォルダ名のみを抜き出すには?2001-05-19(土) 19:45
#27931-0フルパスの取得方法を教えて下さい2000-08-14(月) 19:53
#27435-0dir関数2002-03-10(日) 14:05
#12398-0dir関数でフォルダ名を取得したときについて1999-12-25(土) 12:17
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)