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

初歩のVC++Programming Tips Win32SDK篇

フルパス名からファイル名を取得するには


パス名の先頭から文字列を検索して,「:,\,/」のいずれかが最後に現れる地点を探します。ただし,漢字などの2バイト文字を考慮するには少し工夫が必要です。

文字を比較するときは,比較対象の文字が2バイト文字か1バイト文字かを調べる必要があります。2バイト文字の判別にはIsDBCSLeadByte関数を使用します。また,文字列ポインタの操作には単項演算子を使用せずに,CharNext関数とCharPrev関数を使用します。この関数で1バイト文字の時も2バイト文字の時も,文字単位でのポインタの増減が可能になります。次のような関数を作ると便利です。

//////////////////////////////////////////////////////////////////////////////
//getFileName
//フルパス名からファイル名を取得する
//////////////////////////////////////////////////////////////////////////////
/*
引数:  char *lpszPath    ファイル名を含むパス名へのポインタ

戻り値:char * ファイル名へのポインタ
       ファイル名を含まないときは""へのポインタ
    [\],[/],[:]が見つからなかった場合、引数をファイル名とみなしてそのまま返す
*/
char *getFileName(char *lpszPath)
{
    char    *lpszPtr=lpszPath;

    while(*lpszPtr != '\0')
    {
        //2バイト文字の先頭はスキップ
        if(IsDBCSLeadByte(*lpszPtr) == 0)
        {
            //[\],[/],[:]を見つけたら現在地+1のポインタを保存
            if((*lpszPtr == '\\') || (*lpszPtr == '/') || (*lpszPtr == ':'))
            {
                lpszPath=lpszPtr+1;
            }
        }
        //次の文字へ
        lpszPtr=CharNext(lpszPtr);
    }
    return lpszPath;
}

参考文献
Microsoft Windows95 プログラマーズガイド 「国際化ガイドライン」「ダブルバイト文字の使用」


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