パス名の先頭から文字列を検索して,「:,\,/」のいずれかが最後に現れる地点を探します。ただし,漢字などの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 プログラマーズガイド 「国際化ガイドライン」「ダブルバイト文字の使用」