[PR]

短いファイル名(8.3形式)から
長いファイル名を取得する

戻る

 短いファイル名から長いファイル名を取得する関数に、 関数 GetLongPathName() がある。
 ただし、 関数 GetLongPathName() は、Windows 98 以前のOSでは動作しない。
 Windows 98 以前のOSでも動作する「短いファイル名から長いファイル名を取得する関数」を作る。

//*********************************************************
//  短いファイル名(8.3形式)から長いファイル名を取得する関数
//*********************************************************
BOOL GetLongPathName95( const char *ShortPath, char *LongPath, DWORD BufferSize )
{
	WCHAR         wcShortPath[MAX_PATH+1];
	ULONG         chEaten;
	ITEMIDLIST   *pidl;
	IShellFolder *pshf;
	IMalloc      *pMalloc;

	if ( NOERROR != SHGetMalloc( &pMalloc ) )
		return FALSE; // 失敗

	if ( NOERROR == SHGetDesktopFolder( &pshf ) )
	{
		MultiByteToWideChar( CP_ACP, 0, ShortPath, -1, wcShortPath, min(MAX_PATH,BufferSize) ); 
		if ( NOERROR == pshf->ParseDisplayName( NULL, NULL, wcShortPath, &chEaten, &pidl, NULL ) )
		{
			if ( SHGetPathFromIDList( pidl, LongPath ) ) // パス名を pidl より取得
			{
				pMalloc->Free( pidl );
				pshf->Release();
				pMalloc->Release();
				return TRUE; // 成功
			}
			pMalloc->Free( pidl );
		}
		pshf->Release();
	}
	pMalloc->Release();
	return FALSE; // 失敗
}//GetLongPathName95

 以下に、短いファイル名と取得された長いファイル名との対応例を示す。

第1引数に入力するファイル名第2引数から取得されるファイル名
C:\WINDOWS\スター~1\プログ~1\ラマー~1C:\Windows\スタート メニュー\プログラム\ラマーで始まる何か
第1引数に入力するファイル名第2引数から取得されるファイル名
E:\GAMES\IDES\DOKIV\DOKIV.COME:\GAMES\IDES\DOKIV\DOKIV.COM

関連

長いファイル名から短いファイル名(8.3形式)を取得する
関数 CoCreateInstance() を使用したコードでコンパイルエラーがでる
インターフェイス(IMalloc, IShellLink など)を使用したコードでコンパイルエラーがでる


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp

あなたの作った歌をソフトウェアが人間の声で歌う! これぞ近未来のソフトウェア!
これを流行の一言ですませてはいけない! 技術的にもコンセプト的にも凄い!