使用中のドライブレターを取得する

ネットワークドライブの割り当てや切断などをするときに、どのドライブレターが使われているのかを調べるときはGetLogicalDrivesを利用する。これにより使われているものとそうでないものとを簡単に判別できる。

//
//	使用中のドライブレター取得
//
//ドライブ名が文字列として列挙されて返る。例:AとC、Dドライブが使われているなら"ACD"
//
bool	GetUsedDriveLetter(TCHAR* pszLetter,int nSize)
{
	int		i;
	int		nIndex;
	TCHAR	cbDrive;
	DWORD	dwDrives;

	if(pszLetter == NULL || nSize <= 0)
		return	false;

	dwDrives = ::GetLogicalDrives();

	ZeroMemory(pszLetter,sizeof(TCHAR) * nSize);
	nIndex = 0;
	cbDrive = _T('A');
	for(i = 0; i <= 'Z' - 'A'; i++)
	{
		if(! ((1 << i) & dwDrives))
			continue;

		pszLetter[nIndex++] = cbDrive + i;
		if(nIndex < nSize)
			continue;

		return	(dwDrives << (i+1)) ? false : true;
	}

	return	true;
}



void	Test(void)
{
	bool	ret;
	TCHAR	pszLetters[256];

	ret = GetUsedDriveLetter(pszLetters,256);

	if(ret)
		::MessageBox(NULL,pszLetters,_T(""),MB_OK);
	else
		::MessageBox(NULL,_T("失敗しました"),_T(""),MB_OK);
}

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


カテゴリー「システム情報」 のエントリー