mfc選擇文件夾
❶ MFC按鈕打開選擇一個文件夾,然後獲得文件夾中的所有txt文件名稱!
這個滿足你的要求
s返迴文件路徑
#define
DLG_FILTER
"ALL
Files
(*.*)|*.*||"
#define
DLG_EXT
"*
"
CFileDialog
dlg(TRUE,
_T(DLG_EXT),
NULL,
OFN_HIDEREADONLY
|
OFN_OVERWRITEPROMPT
|
OFN_ALLOWMULTISELECT,
_T(DLG_FILTER));
if
(dlg.DoModal()
==
IDOK)
{
POSITION
pos
=
dlg.GetStartPosition();
while
(pos
!=
0)
{
CString
s
=
dlg.GetNextPathName(pos);
}
}
下面代碼,可以選擇文件夾,會返迴文件夾的路徑
需要自己查找每個文件
char*
GetPath(HWND
hWnd,char*
pBuffer)
{
BROWSEINFO
bf;
LPITEMIDLIST
lpitem;
memset(&bf,0,sizeof
BROWSEINFO);
bf.hwndOwner=hWnd;
bf.lpszTitle=
"選擇路徑";
bf.ulFlags=BIF_RETURNONLYFSDIRS;
//屬性你可自己選擇
lpitem=SHBrowseForFolder(&bf);
if(lpitem==NULL)
//如果沒有選擇路徑則返回
0
return
0;
//如果選擇了路徑則復制路徑,返迴路徑長度
SHGetPathFromIDList(lpitem,pBuffer);
return
pBuffer;
}
❷ mfc 如何復制文件到文件夾
主要有兩個難點:
1、如何選擇文件;
2、選擇好文件之後,如果復制;
1st、關於文件選擇,可參考下面這段代碼:
CString CDcPackerDlg::BootOpenDialog() //返回選擇的文件名稱
{
CString strFile = _T("");
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);
if (dlgFile.DoModal())
{
strFile = dlgFile.GetPathName();
}
return strFile;
}
//載入文件按鈕
void CDcPackerDlg::OnBnClickedSelectdec()
{
// TODO: Add your control notification handler code here
m_strDescPath = ""; //類的成員變數
//"打開文件"對話框,選擇文件,返回其路徑
m_strDescPath = BootOpenDialog();
}
2nd、文件復制:
2.1 獲得程序目錄
CString strPath = "", strDir = "";
char filepath[MAX_PATH];
GetMoleFileName(NULL, filepath, MAX_PATH);
strDir.Format("%s", filepath);
strPath = strDir.Left(strDir.ReverseFind('\\'));
2.2 復制文件
在MFC下可以用CopyFile()函數,定義如下:
BOOL CopyFile(
LPCTSTR lpExistingFileName, //原文件地址,包括文件名
LPCTSTR lpNewFileName, ////目的文件地址,包括文件名
BOOL bFailIfExists //如果目的文件存在的操作
);
3rd、自己把上面給的代碼組裝一下,就可以滿足你的要求了。
打字不易,如滿意,望採納。
❸ MFC如何實現文件夾選擇對話框
今天寫一個程序,其中一個功能是用對話框來選擇一個文件夾的路徑。可是以前常用的CFileDialog必須指定到文件,選擇一個文件夾只能繼續打開而不能返回這個路徑,CFileDialog貌視也沒有參數可以弄成選擇文件夾的式樣。上網找了找,CSDN里有人提供下面這個函數的用法:
CString
ShowSelectDirectoryDlg(const
CString
&
strDlgTitle)
{
char
szDir[MAX_PATH];
BROWSEINFO
bi;
ITEMIDLIST
*pidl;
bi.hwndOwner
=
this->m_hWnd;
bi.pidlRoot
=
NULL;
bi.pszDisplayName
=
szDir;
bi.lpszTitle
=
strDlgTitle;
bi.ulFlags
=
BIF_RETURNONLYFSDIRS;
bi.lpfn
=
NULL;
bi.lParam
=
0;
bi.iImage
=
0;
pidl
=
SHBrowseForFolder(&bi);
if(pidl
==
NULL)
return
_T();
if(!SHGetPathFromIDList(pidl,
szDir))
return
_T();
這個函數的傳入參數strDlgTitle,就是選擇文件夾對話框的標題欄名稱。只需要模擬這個函數的寫法,添加代碼到特定的消息響應函數里去就可以了。
❹ MFC 文件選擇 復制到固定文件夾
CFileDialogfld(TRUE,NULL,NULL,OFN_READONLY,"所有文件|*.*||",this);
if(IDOK==fld.DoModal())
{
CStringfpath=fld.GetPathName();
CStringtpath=_T("D:\");//固定文件夾
tpath+=fld.GetFileName();
::CopyFile(fpath,tpath,TRUE);
}
❺ MFC點擊按鈕打開對話框選擇文件夾(不是文件)
選擇所選擇的文件夾,獲取文件夾的路徑:
CString
m_FileDir;
BROWSEINFO
bi;
ZeroMemory(&bi,
sizeof(BROWSEINFO));
bi.hwndOwner
=
m_hWnd;
bi.ulFlags
=
BIF_RETURNONLYFSDIRS;
LPITEMIDLIST
pidl
=
SHBrowseForFolder(&bi);
BOOL
bRet
=
FALSE;
TCHAR
szFolder[MAX_PATH*2];
szFolder[0]
=
_T('');
if
(pidl)
{
if
(SHGetPathFromIDList(pidl,
szFolder))
bRet
=
TRUE;
IMalloc
*pMalloc
=
NULL;
if
(SUCCEEDED(SHGetMalloc(&pMalloc))
&&
pMalloc)
{
pMalloc->Free(pidl);
pMalloc->Release();
}
}
m_FileDir
=
szFolder;//選擇的文件夾路徑
查找所有MDB文件(記錄數組自己寫吧)
CFileFind
ff;
BOOL
res
=
ff.FindFile(m_FileDir+"*.mdb");
while(res)
{
res
=
ff.FindNextFile();
//不遍歷子目錄
if(!ff.IsDirectory()
&&
!ff.IsDots())
{
CString
strFile
=
ff.GetFileName();
…//
在這里寫需要的代碼
}
}
ff.Close();
//
不要忘記關閉
❻ MFC打開文件夾
void CXXXDlg::OpenFolder(){ BROWSEINFO bi; ZeroMemory(&bi,sizeof(BROWSEINFO)); //添加提示語句 bi.lpszTitle= _T("請選擇文件夾"); //添加"新建文件夾項"和"編輯框" bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX; // 顯示一個對話框讓讓用戶選擇文件夾 LPITEMIDLIST pidl = SHBrowseForFolder(&bi); char szFolder[_MAX_PATH]; memset(szFolder, 0, sizeof(szFolder)); CString strFolder = _T(""); if (pidl != NULL) { SHGetPathFromIDList(pidl, szFolder); //保存文件夾路徑存 strFolder.Format(_T("%s"), szFolder); afxMessageBox(strFolder); } else { return; }}
