ディレクトリ操作

ディレクトリ有無確認

PathIsDirectory()でディレクトリの有無を確認できます。

BOOL PathIsDirectory(
	IN LPCTSTR Path
);
説明 パスが有効なディレクトリかどうかを調べる。
引数
Path:
判定対象とするパスを指定する。
戻り値 パスがディレクトリの場合はTRUE、それ以外の場合はFALSEを返す。

ディレクトリをまとめて作成

ディレクトリが存在しない場合、ルート側から順に作成していかなければなりませんが、MakeSureDirectoryPathExists()を使用するとまとめて作成できます。

BOOL MakeSureDirectoryPathExists(
	PCSTR DirPath
);
説明 指定された全てのディレクトリを作成する。
引数
DirPath:
有効なパス名を指定する、NULLで終わる文字列へのポインタを指定する。パスの最後のコンポーネントがファイル名ではなくディレクトリである場合、文字列の最後に円記号(\)を記述しなければならない。
戻り値 成功した場合はTRUE、失敗した場合はFALSEを返す。

システムの特殊フォルダのパス名取得

SHGetSpecialFolderPath() でシステム特殊フォルダのパス名を取得できます。

HRESULT SHGetSpecialFolderLocation(
	HWND hwndOwner,
	int nFolder,
	LPITEMIDLIST *ppidl
);
説明 特殊フォルダの ITEMIDLIST 構造体へのポインタ(PIDL)を取得する。
引数
hwndOwner:
予約されている。
nFolder:
PIDLを取得するフォルダを識別するCSIDL値を指定する。
ppidl:
アイテムIDリストを受け取る変数のアドレスを指定する。
戻り値 成功した場合は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;
}

CSIDL値

準備中。