ファイル名に拡張子が付いている場合は,最後に現れたピリオドの位置にnullを代入します。ただし,フォルダ名にピリオドが使われていて,ファイル名に拡張子が付いていない場合に備えて,ピリオドを検索する前にフォルダ名の部分はスキップしておく必要があります。次のような関数を作ると便利です。2バイト文字の考慮についてはフルパス名からファイル名を取得するにはを参照してください。
//////////////////////////////////////////////////////////////////////////////
//cutExtName
//ファイル名から拡張子を取り除く
//////////////////////////////////////////////////////////////////////////////
/*
引数: char *lpszFileName ファイル名へのポインタ
(実行後、ファイル名から拡張子が切り離される)
戻り値:なし
*/
void cutExtName(char *lpszFileName)
{
char *pEnd=lpszFileName;
char *pStart=lpszFileName;
while(*pEnd != '\0')
{
if(IsDBCSLeadByte(*pEnd) != 0)
{
pEnd++;
}else
{
if((*pEnd == '\\') || (*pEnd == '/') || (*pEnd == ':'))
{
pStart=pEnd+1;
}
}
pEnd++;
}
pEnd=lpszFileName;
while(*pStart != '\0')
{
if(IsDBCSLeadByte(*pStart) != 0)
{
pStart++;
}else
{
if(*pStart == '.')
{
pEnd=pStart;
}
}
pStart++;
}
//ファイル名に拡張子を含まなかった場合何もしない
if(pEnd == lpszFileName)
{
return;
}
//ファイル名から拡張子を切り離す
*pEnd='\0';
}