- ディレクトリ有無確認
 - ディレクトリをまとめて作成
 - システムの特殊フォルダのパス名取得
 - CSIDL値
 
PathIsDirectory()でディレクトリの有無を確認できます。
BOOL PathIsDirectory( IN LPCTSTR Path );  | 
|
| 説明 | パスが有効なディレクトリかどうかを調べる。 | 
|---|---|
| 引数 | 
  | 
| 戻り値 | パスがディレクトリの場合はTRUE、それ以外の場合はFALSEを返す。 | 
ディレクトリが存在しない場合、ルート側から順に作成していかなければなりませんが、MakeSureDirectoryPathExists()を使用するとまとめて作成できます。
BOOL MakeSureDirectoryPathExists( PCSTR DirPath );  | 
|
| 説明 | 指定された全てのディレクトリを作成する。 | 
|---|---|
| 引数 | 
  | 
| 戻り値 | 成功した場合はTRUE、失敗した場合はFALSEを返す。 | 
SHGetSpecialFolderPath() でシステム特殊フォルダのパス名を取得できます。
HRESULT SHGetSpecialFolderLocation( HWND hwndOwner, int nFolder, LPITEMIDLIST *ppidl );  | 
|
| 説明 | 特殊フォルダの ITEMIDLIST 構造体へのポインタ(PIDL)を取得する。 | 
|---|---|
| 引数 | 
  | 
| 戻り値 | 成功した場合はS_OK(0)、失敗した場合はOLE定義のエラー値を返す。 | 
hwndOwnerは予約領域なので、とりあえずNULLを指定しておきます。
//=============================================================================//
// 特殊フォルダパス名取得
//
//	[引数]
//		pathName:
//			パス名を格納するバッファを指定する。
//
//		nFolder:
//			取得対象フォルダを表すCSIDL値を指定する。
//
//	[戻り値]
//		TRUE	:成功
//		FALSE	:失敗
//
BOOL GetSpecialFolderPath(
	LPTSTR	pathName,	// [o]	パス名を格納するバッファ
	int		nFolder )	// [i]	フォルダを表すCSIDL値
{
	BOOL		bRet = FALSE;
	IMalloc*	pMalloc = NULL;
	//==== IMallocインターフェース取得 ====//
	if(SHGetMalloc(&pMalloc) == NOERROR)
	{
		LPITEMIDLIST	pidl;
		//==== アイテムIDリスト取得 ====//
		if(SHGetSpecialFolderLocation(NULL, nFolder, &pidl) == NOERROR)
		{
			//==== パス取得 ====//
			if(SHGetPathFromIDList(pidl, pathName))
			{
				bRet = true;
			}
			pMalloc->Free(pidl);
		}
		pMalloc->Release();
	}
	return bRet;
}
準備中。