ホームに戻る 初歩のVC++Programming Tipsに戻る

初歩のVC++Programming Tips Win32SDK篇

短いファイル名から長いファイル名を取得するには


 長いファイル名から短いファイル名を取得するための関数として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;
}



copyright (c) 1998-2000 by T-Matsuo
ホームに戻る 初歩のVC++Programming Tipsに戻る