Windows 95 では、実行ファイルにファイルがドラッグされた際、コマンドラインから受け取るファイル名は短いファイルであった。
以下はマイクロソフトのページに載ってたロジック。現在もあるかは不明。
'---------------------------------------------------------------- ' 関数名 : CnvShortToLong ' 機能 : 短いファイル名を長いファイル名に変換する ' 引数 : (in) ShortFileName … ファイルの短いファイル名 ' 戻り値 : 変換された長いファイル名 '---------------------------------------------------------------- Public Function CnvShortToLong(ByVal ShortFileName As String) As String Dim LongFileName As String Dim TempBuff As String Dim SparatorPos As Long 'Instr関数がエラーにならないように文字列の最後に "\" を付ける ShortFileName = ShortFileName & "\" 'ドライブ名は無視して4文字目から開始 SparatorPos = InStr(4, ShortFileName, "\") '\ 記号間の文字列を取り出す While SparatorPos TempBuff = Dir$(Left$(ShortFileName, SparatorPos - 1), _ vbNormal + vbHidden + vbSystem + vbDirectory) If TempBuff = "" Then Exit Function LongFileName = LongFileName & "\" & TempBuff SparatorPos = InStr(SparatorPos + 1, ShortFileName, "\") Wend 'ドライブ名を付けて返す CnvShortToLong = Left$(ShortFileName, 2) & LongFileName End Function
次は VB に付属しているかもしれない DLL を使用する方法。まったくもっておすすめできない。
'VB4.0
'VB5.0
'VB6.0 → GetLongPathName() は無いので使用不可!! や〜いや〜い
'---------------------------------------------------------------- ' 関数名 : CnvShortToLong ' 機能 : 短いファイル名を長いファイル名に変換する ' 引数 : (in) ShortFileName … ファイルの短いファイル名 ' 戻り値 : 変換された長いファイル名 ' 備考 : STKIT432.DLL はWindowsのシステムDllではないので注意 '---------------------------------------------------------------- Public Function CnvShortToLong(ByVal ShortFileName As String) As String Dim TempBuff As String * 256 Call GetLongPathName(ShortFileName, TempBuff, Len(TempBuff)) CnvShortToLong = Left$(TempBuff, InStr(TempBuff, Chr$(0)) - 1) End Function |