1. 程式人生 > >MFC 獲取檔案和資料夾的路徑

MFC 獲取檔案和資料夾的路徑

1.獲取檔案的路徑

CFileDialog fileDlg(TRUE);
	fileDlg.m_ofn.lpstrTitle=L"開啟檔案";
	//fileDlg.m_ofn.lpstrFilter=_T("Program(*.exe)\0*.exe\0All Files(*.*)\0*.*\0\0");
	if(IDOK==fileDlg.DoModal())
	{
		LPWSTR lpPathName = fileDlg.m_ofn.lpstrFile;
		SetDlgItemText(IDC_EDIT_SERV_PATH,lpPathName);
	}

2.獲取資料夾的路徑 (1)BROWSEINFO結構
●定義
typedef struct_browseinfo
{
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPSTR pszDisplayName;
LPCSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
}BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;
成員變數 hwndOwner:瀏覽資料夾對話方塊的父窗體控制代碼。 pidlRoot:ITEMIDLIST結構的地址,包含瀏覽時的初始根目錄,而且只有被指定的目錄和其子目錄才顯示在瀏覽資料夾對話方塊中。該
成員變數
可以是NULL,在此時桌面目錄將被使用。
pszDisplayName:用來儲存使用者選中的目錄字串的記憶體地址。該緩衝區的大小預設是定義的MAX_PATH常量巨集。 lpszTitle:該瀏覽資料夾對話方塊的顯示文字,用來提示該瀏覽資料夾對話方塊的功能、作用和目的。 ulFlags:該標誌位描述了對話方塊的選項。它可以為0,也可以是以下常量的任意組合: BIF_BROWSEFORCOMPUTER:返回計算機名。除非使用者選中瀏覽器中的一個計算機名,否則該對話方塊中的“OK”按鈕為灰色。 BIF_BROWSEFORPRINTER:返回印表機名。除非選中一個印表機名,否則“OK”按鈕為灰色。
BIF_BROWSEINCLUDEFILES:瀏覽器將顯示目錄,同時也顯示檔案。 BIF_DONTGOBELOWDOMAIN:在樹形視窗中,不包含域名底下的網路目錄結構。 BIF_EDITBOX:瀏覽對話方塊中包含一個編輯框,在該編輯框中使用者可以輸入選中項的名字。 BIF_RETURNFSANCESTORS:返回檔案系統的一個節點。僅僅當選中的是有意義的節點時,“OK”按鈕才可以使用。 BIF_RETURNONLYFSDIRS:僅僅返回檔案系統的目錄。例如:在瀏覽資料夾對話方塊中,當選中任意一個目錄時,該“OK”按鈕可用,而當選中“我的電腦”或“網路上的芳鄰”等非有意義的節點時,“OK”按鈕為灰色。 BIF_STATUSTEXT:在對話方塊中包含一個狀態區域。通過給對話方塊傳送訊息使回撥函式設定狀態文字。 BIF_VALIDATE:當沒有BIF_EDITBOX標誌位時,該標誌位被忽略。如果使用者在編輯框中輸入的名字非法,瀏覽對話方塊將傳送BFFM_VALIDATEFAILED訊息給回撥函式。 lpfn:應用程式定義的瀏覽對話方塊回撥函式的地址。當對話方塊中的事件發生時,該對話方塊將呼叫回撥函式。該引數可用為NULL。 lParam:對話方塊傳遞給回撥函式的一個引數指標 iImage:與選中目錄相關的影象。該影象將被指定為系統圖像列表中的索引值。 程式碼例項:
CString m_strFileOut = _T("");
 TCHAR servPath[MAX_PATH];//用來存放資料夾路徑
 BROWSEINFO bi;
 LPITEMIDLIST pidl;
 bi.hwndOwner = this->m_hWnd;
 bi.pidlRoot = NULL;
 bi.pszDisplayName = servPath;
 bi.lpszTitle = _T("選擇輸出檔案路徑");
 bi.ulFlags = BIF_RETURNONLYFSDIRS;
 bi.lpfn = NULL;
 bi.lParam = NULL;
 bi.iImage = NULL;
 if((pidl = SHBrowseForFolder(&bi)) != NULL)
 {
  if(SUCCEEDED(SHGetPathFromIDList(pidl, servPath))) //得到資料夾的全路徑,不要的話,只得本資料夾名
  {
	  SetDlgItemText(IDC_EDIT_SERV_PATH,servPath);
  }
 }