長いファイル名から短いファイル名を取得するための関数としてGetShortPathNameがありますが、短いファイル名から長いファイル名を取得する関数は見当たりません。
そこで、FindFirstFile関数で短いファイル名からファイルを検索して、長いファイル名を取得することにします。
次のような関数を作ると便利です。
//////////////////////////////////////////////////////////////////////////////
//getLongPathName
//短いファイル名を長いファイル名に変換
//////////////////////////////////////////////////////////////////////////////
/*
引数:
LPSTR lpszLongFileName 長いファイル名を受け取るバッファへのポインタ
LPSTR lpszShortPathName 短いファイル名を含むパス名へのポインタ
DWORD dwSize バッファサイズ
戻り値:
DWORD バッファにコピーした文字列の長さ
0のとき異常終了
*/
DWORD getLongPathName(LPSTR lpszLongFileName, LPSTR lpszShortPathName,
DWORD dwSize)
{
WIN32_FIND_DATA fd;
HANDLE hFind;
//短いファイル名でファイルを検索
if((hFind=FindFirstFile(lpszShortPathName,&fd)) != INVALID_HANDLE_VALUE)
{
FindClose(hFind);
if((DWORD )lstrlen(fd.cFileName) <= dwSize)
{
//長いファイル名をバッファにコピー
lstrcpy(lpszLongFileName,fd.cFileName);
//バッファにコピーした文字列を返す
return lstrlen(lpszLongFileName);
}
}
lstrcpy(lpszLongFileName,"");
//バッファのサイズを超えたかファイルが見つからなかったときは異常終了
return 0;
}