ここ1年半程、仕事でVB6を使って開発することがない(バグ修正を除けば)。
しかしオンラインソフトはほとんどVB6で作っているのでバリバリのVB6使いであることに変わりない。
近く公開予定のフリーソフト「ファイルとフォルダの神隠し」を作っているときに思いついた便利な方法を内緒で教えます。
ファイルの有無・フォルダの有無をチェックするには例えばFileSystemObjectを使ったスクリプトがよく知られている。が、ファイル用とフォルダ用が別のメソッドになっている。これでは事前にファイルかフォルダか判定してからでないと使えない。
それを事前チェック無しで、ファイルかフォルダかも判定して存在をチェックする方法が以下の簡単な記述でできる。今までこの倍もあるコードを書いてしかもフォルダチェックはダミーの書き込みまでしていたから(そこではDir関数で判定していた)自分でも唖然としている。頭と関数は使い様だと思った。
'//// ファイル及びフォルダの有無チェック(タイプを返す) /////
' 0=フォルダ、1=ファイル、-1=存在しない
'-----------------------------------------------------------
Public Function Exists(ByVal strPathName As String) As Integer
'strPathName : フルパス名
'------------------------
Dim ret As Integer
On Error GoTo CheckError
If (GetAttr(strPathName) And vbDirectory) = vbDirectory Then
Debug.Print strPathName & "はフォルダです。"
ret = 0
Else
Debug.Print strPathName & "はファイルです。"
ret = 1
End If
Exists = ret
Exit Function
CheckError:
Debug.Print strPathName & "が見つかりません。"
Exists = -1
End Function
'//// ファイル及びフォルダの有無チェック(有無のみ判定) /////
' True=存在する、False=存在しない
'-----------------------------------------------------------
Public Function Exists2(ByVal strPathName As String) As Boolean
'strPathName : フルパス名
'------------------------
On Error GoTo CheckError
If (GetAttr(strPathName) And vbDirectory) = vbDirectory Then
Debug.Print strPathName & "はフォルダです。"
Else
Debug.Print strPathName & "はファイルです。"
End If
Exists2 = True
Exit Function
CheckError:
Debug.Print strPathName & "が見つかりません。"
End Function
解説すると、(GetAttr(strPathName) And vbDirectory) = vbDirectory を実行し、エラーすれば存在しないパスだと判るしTrueであればフォルダであり、Falseであればファイルだというのだ。
実に判りやすい。
続きを読む

