OLEDragDropイベントにて、ファイルとフォルダを判別するには?

解決


ken  2003-06-03 05:47:25  No: 78137

あるコントロール(今回はリストビューですが)の、OLEDragDropイベントにて、
DataObject型で提供されるデータが、
ファイルであるのか、フォルダであるのかの判別がうまく行きません。
ヘルプ等を参照してみたのですが、

    'ドロップされたものがファイルであるかどうか確認
    If Data.GetFormat(vbCFFiles) = True Then

上記のような構文がありましたが、上記のif文だと
フォルダもファイルもTRUEになってしまいます。

初歩的な質問ですみませんが、判別方法を知っている方がいらしたら、
ご教授をお願いいたします。


ken  2003-06-03 06:03:07  No: 78138

補足です。

Data.Files.Item(1)  の中身を用いて open を行い、
開けばファイル、開かなければディレクトリ  と行った判別方法は出来るだけ避けたいと
思っております。

しかし、現状これ以外に方法はあるのでしょうか・・・。


oku  URL  2003-06-03 06:25:59  No: 78139

Dir関数で判別できますよ。


ken  2003-06-03 07:22:21  No: 78140

okuさん、回答ありがとうございました。
Dir関数を用いることで、希望通りの処理ができました。

同じ問題に直面した方のために、
ソースを貼り付けておきます(汚いですが

    'ドロップファイル数分繰り返し
    For iLoop = 1 To Data.Files.Count
        
        'ファイルであるか
        If Dir(Data.Files.Item(iLoop), vbNormal) <> vbNullString Then
            
            'ドロップされたファイルを処理対象リストに追加
            Call AddDocumentList(Data.Files.Item(iLoop))
        
        Else
            
            '念のためディレクトリであるかを確認
            If (GetAttr(Data.Files.Item(iLoop)) And vbDirectory) = vbDirectory Then

                ' そのディレクトリ内に存在するファイル名を取得
                cFile = Dir(Data.Files.Item(iLoop) & "\*", vbNormal)
                    
                'ディレクトリ内のファイル全てを取得するまで繰り返し
                Do While cFile <> vbNullString
                    'ドロップされたファイルを処理対象リストに追加
                    Call AddDocumentList(Data.Files.Item(iLoop) & "\" & cFile)
                    cFile = Dir
                Loop
            
            End If

        End If

    Next iLoop

上記構文で複数のフォルダ+複数のファイル時に、
全てのアイテムを取得できることを確認しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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