あるコントロール(今回はリストビューですが)の、OLEDragDropイベントにて、
DataObject型で提供されるデータが、
ファイルであるのか、フォルダであるのかの判別がうまく行きません。
ヘルプ等を参照してみたのですが、
'ドロップされたものがファイルであるかどうか確認
If Data.GetFormat(vbCFFiles) = True Then
上記のような構文がありましたが、上記のif文だと
フォルダもファイルもTRUEになってしまいます。
初歩的な質問ですみませんが、判別方法を知っている方がいらしたら、
ご教授をお願いいたします。
補足です。
Data.Files.Item(1) の中身を用いて open を行い、
開けばファイル、開かなければディレクトリ と行った判別方法は出来るだけ避けたいと
思っております。
しかし、現状これ以外に方法はあるのでしょうか・・・。
Dir関数で判別できますよ。
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
上記構文で複数のフォルダ+複数のファイル時に、
全てのアイテムを取得できることを確認しました。
ツイート | ![]() |