[kaze's test] プログラミングメモ →目次

フォルダ操作

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);
}