ファイルがショートカットやリンクかどうかを調べる

指定されたパスがショートカットファイルやリンクファイルかどうかを調べる。

独自にファイルを開くアプリケーションを作るときは先にショートカットかどうかを調べて、ショートカットファイルであればそのリンク先を取得して開く方がいい場合もある。この手の実装漏れはリリース直前のテスト作業でも発見できないことがあるので要注意かもしれない。

#include "shobjidl.h"
#include "shellapi.h"

//
//	ファイルがショートカットかどうか
//
//	正常な.lnkと.urlならtrueが返る
//
bool	IsShortcut(LPCTSTR pszFile)
{
	DWORD_PTR	dwRet;
	SHFILEINFO	info;

	dwRet = ::SHGetFileInfo(pszFile,0,&info, sizeof(SHFILEINFO),SHGFI_ATTRIBUTES);
	if(dwRet == 0)
		return	false;

	return	(info.dwAttributes & SFGAO_LINK) ? true : false;
}



void	Test(void)
{
	bool	ret;

	ret = IsShortcut(_T("c:\\IO.SYS"));

	if(ret)
		::MessageBox(NULL,_T("ショートカットファイルです"),_T(""),MB_OK);
	else
		::MessageBox(NULL,_T("ショートカットファイルではありません"),_T(""),MB_OK);
}

プロジェクトファイルをダウンロード


カテゴリー「ファイル・フォルダ」 のエントリー