您的位置:首页 > 其它

MFC 目录选取,指定类型文件查找复制

2013-10-06 22:32 453 查看
目录选取:

BROWSEINFO bi;

ZeroMemory(&bi, sizeof(BROWSEINFO));

bi.hwndOwner = m_hWnd;

bi.ulFlags = BIF_RETURNONLYFSDIRS;

bi.lpszTitle = _T("Browse A Input Path");

LPITEMIDLIST pidl = SHBrowseForFolder(&bi);

BOOL bRet = FALSE;

TCHAR szFolder[MAX_PATH*2];

szFolder[0] = _T('/0');

if (pidl)

{

if (SHGetPathFromIDList(pidl, szFolder))

bRet = TRUE;

IMalloc *pMalloc = NULL;

if (SUCCEEDED(SHGetMalloc(&pMalloc)) && pMalloc)

{

pMalloc->Free(pidl);

pMalloc->Release();

}

}

if(bRet)

{

m_strInputPath = szFolder;//选择的文件夹路径

SetDlgItemText(IDC_EINPUT,m_strInputPath);

}

/////////////////////////////////////////////////////////////////////////////////////////////

递归查找指定类型的文件:

void CFileFilterToolDlg::Recurse(CString strDir,CString strExt)

{

CFileFind finder;

CString strCurrDir;

strCurrDir = strDir + _T("\\*.*");

BOOL bWorking = finder.FindFile(strCurrDir);

while(bWorking)

{

bWorking = finder.FindNextFile();

CString tempFileName = finder.GetFilePath();

//cout<< (LPCTSTR) temp<<endl;

if(finder.IsDots())continue;

if(finder.IsDirectory())

{

CString str = finder.GetFilePath();

// cout << (LPCTSTR) str << endl;

Recurse(str,strExt);

}

else

{

//MessageBox(tempFileName);

CString strCurrFileExt = tempFileName.Right(tempFileName.GetLength() - tempFileName.ReverseFind(_T('.')));

//MessageBox(strCurrFileExt);

CString strCurrFileName = tempFileName.Right(tempFileName.GetLength() - tempFileName.ReverseFind(_T('\\')) - 1);

//MessageBox(strCurrFileName);

CString strDstFileName = m_strOutputPath + _T("\\") + strCurrFileName;

//MessageBox(strDstFileName);

if(0 == strCurrFileExt.Compare(strExt))

{

int nRet = MCopyFile(tempFileName,strDstFileName,this->m_bCoverWrite);

CString strMsg = strCurrFileName;

if(0 == nRet)

{

m_nCountFindFilsCopySuccess++;

strMsg += _T(" :Success");

}

else if(-1 == nRet)

{

CString str;

str.Format(_T("复制文件%s时失败,该文件已存在!"),tempFileName);

//MessageBox(str);

strMsg += _T(" :") + str;

}

m_ctrlListFiles.InsertString(m_nCountTotalFilesFinded,strMsg);

m_ctrlListFiles.SetCurSel(m_nCountTotalFilesFinded);

m_nCountTotalFilesFinded++;

}

//MessageBox(strCurrFileExt);

}

}

finder.Close();

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////

//复制该文件

PathFileExists的头文件和库:

#include <shlwapi.h>

#pragma comment(lib,"Shlwapi.lib")

int MCopyFile(CString strSrc, CString strDest, BOOL cover)

{

if(!cover)

{

if(PathFileExists(strDest))return -1;

}

//CopyFile((LPCSTR)strSrc, (LPCSTR)strDest, cover);

CopyFile(strSrc, strDest, cover);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: