小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

PathFileExistsの罠

VB2005でのPathFileExistsで、はまったのでメモしときます。


PathFileExistsは、引数にファイルパスを指定して、そのファイルが存在する場合、真(0以外)が返され、存在しない場合、偽(0)が返されます。
そのファイルパス中にカタカナが含まれると、なぜかファイルパスの文字列は壊されるのです。

◆NGサンプル

Declare Function PathFileExists Lib "shlwapi" Alias "PathFileExistsA" (ByVal lpszPath As String) As Integer
 :    
 : 
    Dim strFilePath As String = "C:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\AP.lnk"
    If PathFileExists(strFilePath) = 0 Then
       MsgBox "ファイルが存在しません。
    End If

存在チェックは正常なのですが、そのあとstrFilePathの内容を見ると『スタート』以降が無くなるのです。つまり、strFilePathの内容が壊されるのです。
原因はわかりませんが、パス中のカタカナが悪さをしている感じです。

◆OKサンプル1

これを以下のようにコンスタントにすると大丈夫になります。

    Const strFilePath As String = "C:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\AP.lnk"
    If PathFileExists(strFilePath) = 0 Then
       MsgBox "ファイルが存在しません。
    End If

◆OKサンプル2

また、直接引数に文字列を指定しても大丈夫です。

    If PathFileExists("C:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\AP.lnk") = 0 Then
       MsgBox "ファイルが存在しません。
    End If