MFC应用实例:[61]复制文件夹及其文件

2025-11-16 10:54:31

1、新建一个基于对话框的应用程序,工程名为CopyFolder。

MFC应用实例:[61]复制文件夹及其文件

2、界面设计如下,添加四个按钮,两个编辑框,两个文本控件。

MFC应用实例:[61]复制文件夹及其文件

3、对源目录后面的“>>”按钮添加响应函数OnRfolder() ,响应函数OnRfolder() 代码如下:

void CCopyFolderDlg::OnRfolder() 

{

    LPMALLOC  pMalloc;  //定义指向IMalloc的指针

    if (::SHGetMalloc(&pMalloc) != NOERROR)

        return; // failed to get allocator

    char szDisplayName[_MAX_PATH];

    char szBuffer[_MAX_PATH];

    BROWSEINFO browseInfo; //构造对话框结构

    browseInfo.hwndOwner = this->m_hWnd;

 忌率   browseInfo.pidlRoot = NULL; //设置根目录为桌面

    browseInfo.pszDisplayName = szDisplayName;

    browseInfo.lpszTitle = "选择要复制的源目录";   //对话框标题

    browseInfo.ulFlags = BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;

    browseInfo.lpfn = NULL;     //未用

    browseInfo.lParam = 0;    捕婶   //未用

    LPITEMIDLIST lpItemIDList;

    if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo))!= NULL)

    {

        if (::SHGetPathFromIDList(lpItemIDList, szBuffer))//得到目录的路径

        {

            if (szBuffer[0] == '\0')

            {

                return ;

            }

            m_strSourceFolder = szBuffer;

UpdateData(false);

        }

        else

        {

AfxMessageBox("不能得到所选的文件夹!"言哨搁,MB_ICONSTOP|MB_OK);

return;

        }

        pMalloc->Free(lpItemIDList);

        pMalloc->Release();

    }

}

MFC应用实例:[61]复制文件夹及其文件

4、对目的目录后面的“>>”按钮添加响应函数OnDfolder() ,响应函数OnDfolder() 代码如下:

void CCopyFolderDlg::OnDfolder() 

{

    LPMALLOC  pMalloc;  //定义指向IMalloc的指针

    if (::SHGetMalloc(&pMalloc) != NOERROR)

        return; // failed to get allocator

    char szDisplayName[_MAX_PATH];

    char szBuffer[_MAX_PATH];

    BROWSEINFO browseInfo; //构造对话框结构

    browseInfo.hwndOwner = this->m_hWnd;

    browseInfo.pidlRoot = NULL; //设置根目录为桌面

    browseInfo.pszDisplayName = szDisplayName;

    browseInfo.lpszTitle = "选择复制的目的目录";   //对话框标题

    browseInfo.ulFlags = BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;

    browseInfo.lpfn = NULL;     //未用

    browseInfo.lParam = 0;       //未用

    LPITEMIDLIST lpItemIDList;

    if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo))!= NULL)

    {

        if (::SHGetPathFromIDList(lpItemIDList, szBuffer))//得到目录的路径

        {

            if (szBuffer[0] == '\0')

            {

                return ;

            }

            m_strDestFolder = szBuffer;

UpdateData(false);

        }

        else

        {

AfxMessageBox("不能得到所选的文件夹!",MB_ICONSTOP|MB_OK);

return;

        }

        pMalloc->Free(lpItemIDList);

        pMalloc->Release();

    }

}

MFC应用实例:[61]复制文件夹及其文件

5、对“复制”按钮添加响应函数OnCopy() ,响应函数OnCopy() 代码如下:

void CCopyFolderDlg::OnCopy() 

{

   UpdateData(true);

   SHFILEOPSTRUCT  sfo;//结构体

   char szSource[MAX_PATH];

   char szDest[MAX_PATH];

   lstrcpy(szSource,m_strSourceFolder);//源目录

   lstrcpy(szDest,m_strDestFolder);//目的目录

   szSource[lstrlen(szSource)+1] = 0;

   szDest[lstrlen(szDest)+1] = 0;

   sfo.hwnd = NULL;//窗口指针

   sfo.wFunc = FO_COPY;//操作类型为复制

   sfo.pFrom = (LPCSTR)szSource;//源目录

   sfo.pTo = (LPCSTR)szDest;//目的目录

   sfo.fFlags =   FOF_NOCONFIRMATION | //对所有复制过程中可能弹出的对话框采用“全是”选项

                  FOF_SIMPLEPROGRESS | //使用进度条

                  FOF_NOCONFIRMMKDIR ; //不自动创建新目录

   sfo.hNameMappings = 0;

   sfo.lpszProgressTitle = "文件夹拷贝";//进度条的标题

   if(SHFileOperation(&sfo)==0) //拷贝成功,SHFileOperation返回0

  AfxMessageBox("成功完成拷贝!");

   else

  AfxMessageBox("拷贝出错");

}

MFC应用实例:[61]复制文件夹及其文件

6、程序运行如下:

MFC应用实例:[61]复制文件夹及其文件

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢