取得したファイル名の拡張子だけをカットする方法

NO IMAGE

参考:WIN32工作小屋http://www.win32lab.com/tips/tips7.html

例は、xxxDlgというプログラム名とする。

1.xxDlg.hに赤色の箇所を追記。
class CxxxDlg : public CDialog
{
public:
—省略—
protected:
HICON m_hIcon;

// 生成されたメッセージ マップ関数
//{{AFX_MSG(CFileCopyDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg void OncutExtName(char *lpszFileName);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

2.下記をCxxxDlg.cppに追加する(WIN32工作小屋にあったコードをそのままパクる(^^;;)。
void CxxxDlg::OncutExtName(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′;
}

3.そのまま関数を呼び出す。
OncutExtName(lpsz);
というように。()内はlpsz形式なので、ファイル名を一旦lpsz形式に変換する必要がある。