VC中我有多个txt存在同一个文件夹下,我想通过CFileDialog类选择文件夹进行批处理,而不是一一
VC中我有多个txt存在同一个文件夹下,我想通过CFileDialog类选择文件夹进行批处理,而不是一一选择每个txt进行处理,怎么办啊?...
VC中我有多个txt存在同一个文件夹下,我想通过CFileDialog类选择文件夹进行批处理,而不是一一选择每个txt进行处理,怎么办啊?
展开
3个回答
展开全部
////////////////////////////////////////////////////////////////////////获取文件夹下所有文件
//自己添加这两行,与多文件操作,判断文件(夹)是否存在有关
#pragma comment(lib, "shlwapi.lib")
#include "shlwapi.h"
{
CString strFolderDirection="";
GetDirection(strFolderDirection);
GetMultiFilePahtName(strFolderDirection,ArrayE00Path,"*.txt");
}
void CAutoClickDlg::GetDirection(CString &FolderDir)
{LPMALLOC pMalloc;
/*Gets the Shell's default allocator */
if (::SHGetMalloc(&pMalloc) == NOERROR)
{
BROWSEINFO bi;
char pszBuffer[MAX_PATH];
for (int i=0;i<MAX_PATH;i++) pszBuffer[i]=' ';//将pszBuffer全部赋为空格
LPITEMIDLIST pidl;
//Get help on BROWSEINFO struct-it's got all the bit settings.
bi.hwndOwner = GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = pszBuffer;
bi.lpszTitle = _T("请选择文件目录:");
bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
if ((pidl = ::SHBrowseForFolder(&bi)) != NULL)
{
::SHGetPathFromIDList(pidl, pszBuffer);
pMalloc->Free(pidl);
}
pMalloc->Release();
FolderDir=pszBuffer;
}
}
void CAutoClickDlg::GetMultiFilePahtName(CString folder, CStringArray &files, CString filter)
{
CFileFind FFind;
CString szDir = folder;
if(szDir.Right(1) != "\\")szDir += "\\";
szDir += filter;
BOOL Ressult = FFind.FindFile(szDir);
CString Filepath;
while(Ressult)
{
Ressult = FFind.FindNextFile();
if(!FFind.IsDirectory()&&!FFind.IsDots())
{
Filepath=FFind.GetFilePath();
files.Add(Filepath);
}
}
FFind.Close();
}
//自己添加这两行,与多文件操作,判断文件(夹)是否存在有关
#pragma comment(lib, "shlwapi.lib")
#include "shlwapi.h"
{
CString strFolderDirection="";
GetDirection(strFolderDirection);
GetMultiFilePahtName(strFolderDirection,ArrayE00Path,"*.txt");
}
void CAutoClickDlg::GetDirection(CString &FolderDir)
{LPMALLOC pMalloc;
/*Gets the Shell's default allocator */
if (::SHGetMalloc(&pMalloc) == NOERROR)
{
BROWSEINFO bi;
char pszBuffer[MAX_PATH];
for (int i=0;i<MAX_PATH;i++) pszBuffer[i]=' ';//将pszBuffer全部赋为空格
LPITEMIDLIST pidl;
//Get help on BROWSEINFO struct-it's got all the bit settings.
bi.hwndOwner = GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = pszBuffer;
bi.lpszTitle = _T("请选择文件目录:");
bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
if ((pidl = ::SHBrowseForFolder(&bi)) != NULL)
{
::SHGetPathFromIDList(pidl, pszBuffer);
pMalloc->Free(pidl);
}
pMalloc->Release();
FolderDir=pszBuffer;
}
}
void CAutoClickDlg::GetMultiFilePahtName(CString folder, CStringArray &files, CString filter)
{
CFileFind FFind;
CString szDir = folder;
if(szDir.Right(1) != "\\")szDir += "\\";
szDir += filter;
BOOL Ressult = FFind.FindFile(szDir);
CString Filepath;
while(Ressult)
{
Ressult = FFind.FindNextFile();
if(!FFind.IsDirectory()&&!FFind.IsDots())
{
Filepath=FFind.GetFilePath();
files.Add(Filepath);
}
}
FFind.Close();
}
展开全部
CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName =NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter =NULL, CWnd* pParentWnd = NULL );
DWORD dwFlags
自定义标志,当要进行多选的时候添加OFN_ALLOWMULTISELECT
CFileDialog::GetPathName 得到打开文件的路径名
For example, GetPathName will return "C:\FILES\TEXT.DAT" for the file
C:\FILES\TEXT.DAT.
CFileDialog::GetStartPosition得到列表中第一个文件路径的位置。
该函数使用时候,构造函数中的dwFlags必须选定OFN_ALLOWMULTISELECT
依次取出文件处理就可以了
DWORD dwFlags
自定义标志,当要进行多选的时候添加OFN_ALLOWMULTISELECT
CFileDialog::GetPathName 得到打开文件的路径名
For example, GetPathName will return "C:\FILES\TEXT.DAT" for the file
C:\FILES\TEXT.DAT.
CFileDialog::GetStartPosition得到列表中第一个文件路径的位置。
该函数使用时候,构造函数中的dwFlags必须选定OFN_ALLOWMULTISELECT
依次取出文件处理就可以了
参考资料: http://hi.baidu.com/xtxycy/blog
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SHBrowseForFolder
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询