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

初歩のVC++Programming Tips Win32SDK篇

ファイル名から拡張子を取り除くには


ファイル名に拡張子が付いている場合は,最後に現れたピリオドの位置に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';
}


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