フォルダ操作 1.フォルダ作成(API) BOOL CreateDirectory(LPCTSTR pstrDirName);//pstrDirNameはフルパスです。 2.フォルダの削除(API) BOOL RemoveDirectory( LPCTSTR lpPathName ); 3.フォルダが存在するかどうかの判断(Shell Function) #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") if (PathIsDirectory(_T("d:\\temp"))) AfxMessageBox(_T("存在")); else AfxMessageBox(_T("存在しない")); 4.カレントフォルダの取得(API) DWORD GetCurrentDirectory( DWORD nBufferLength, LPTSTR lpBuffer ); 5.実行ファイルのフォルダの取得(API) DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize ); 6.特別フォルダの取得(Shell Function) BOOL SHGetSpecialFolderPath( HWND hWndOwner, LPTSTR lpszPath, int nFolder, BOOL bCreate); 例:My Documentのフォルダを取得する TCHAR szDirFile[1024]; memset(szDirFile, 0, sizeof(szDirFile)); BOOL bRet = SHGetSpecialFolderPath(NULL,szDirFile,CSIDL_PERSONAL,true); if (bRet) { AfxMessageBox(szDirFile); } 7.フォルダを選択するダイアログ Shell Functionを利用します。 #include<shlobj.h> INT CALLBACK _BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM pData) { TCHAR szDir[MAX_PATH]; switch(uMsg) { case BFFM_INITIALIZED: // WParam is TRUE since you are passing a path. // It would be FALSE if you were passing a pidl. SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)pData); break; case BFFM_SELCHANGED: // Set the status window to the currently selected path. if (SHGetPathFromIDList((LPITEMIDLIST)lParam ,szDir)) { SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir); } break; } return 0; } CString GetFolderFullpath(LPCTSTR lpszDefault) { TCHAR buffDisplayName[MAX_PATH]; TCHAR fullpath[MAX_PATH]; BROWSEINFO browseinfo; LPITEMIDLIST lpitemidlist; ZeroMemory(&browseinfo, sizeof( BROWSEINFO )); browseinfo.pszDisplayName = buffDisplayName ; browseinfo.lpszTitle = _T("フォルダを選択してください"); browseinfo.ulFlags = BIF_RETURNONLYFSDIRS; browseinfo.lParam = (LPARAM)lpszDefault; browseinfo.lpfn = _BrowseCallbackProc; if(!(lpitemidlist = SHBrowseForFolder(&browseinfo))) { AfxMessageBox(_T("フォルダを選択していませんでした")); return CString(_T("")); } else { SHGetPathFromIDList(lpitemidlist, fullpath); CoTaskMemFree(lpitemidlist); return CString(fullpath); } } void CTest77Dlg::OnBnClickedButton1() { CString strFolderFullpath = GetFolderFullpath(_T("d:\\Temp")); if (strFolderFullpath != _T("")) AfxMessageBox(strFolderFullpath); } |