一 、VC++, MFC中實現選擇文件夾,選擇文件對話框,確定當前工作目錄2008-03-22 21:03//選擇目錄
void CTestDlg::OnOK()
{
// BROWSEINFO 結構
////////////////////////////////////
// typedef struct _browseinfo {
// HWND hwndOwner;
// LPCITEMIDLIST pidlRoot;
// LPSTR pszDisplayName;
// LPCSTR lpszTitle;
// UINT ulFlags;
// BFFCALLBACK lpfn;
// LPARAM lParam;
// int iImage;
// } BROWSEINFO;
///////////////////////////////////
CString sFolderPath;
BROWSEINFO bi;
char Buffer[MAX_PATH];
//初始化入口參數bi開始
bi.hwndOwner = NULL;
bi.pidlRoot =NULL;//初始化制定的root目錄很不容易,
bi.pszDisplayName = Buffer;//此參數如爲NULL則不能顯示對話框
bi.lpszTitle = "修改接收路徑";
//bi.ulFlags = BIF_BROWSEINCLUDEFILES;//包括文件
bi.ulFlags = BIF_EDITBOX;//包括文件
bi.lpfn = NULL;
bi.iImage=IDR_MAINFRAME;
//初始化入口參數bi結束
LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//調用顯示選擇對話框
if(pIDList)
{
SHGetPathFromIDList(pIDList, Buffer);
//取得文件夾路徑到Buffer裏
sFolderPath = Buffer;//將路徑保存在一個CString對象裏
}
LPMALLOC lpMalloc;
if(FAILED(SHGetMalloc(&lpMalloc))) return;
//釋放內存
lpMalloc->Free(pIDList);
lpMalloc->Release();
MessageBox(sFolderPath,"Title",MB_OK);
TRACE("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
TRACE(sFolderPath);
TRACE("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
//打開、保存文件
void CTestDlg::OnButton1()
{
// 獲取當前工作路徑
CString strAppName;//當前工作目錄
::GetModuleFileName(NULL, strAppName.GetBuffer(_MAX_PATH), _MAX_PATH);
strAppName.ReleaseBuffer();
int nPos = strAppName.ReverseFind('\\');
strAppName = strAppName.Left(nPos + 1);
// AfxMessageBox(strAppName);
// 文件擴展名過濾器
LPCTSTR szFilter = "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";
//初始目錄是c:\windows, 初始選擇的文件名是test,初始後綴過濾器是 Chart Files (*.xlc)
//CFileDialog dlg(TRUE,NULL ,"C:\\windows\\test" ,OFN_ENABLESIZING ,szFilter,NULL); // 打開用TRUE, 保存用 FALSE
//第一個參數變成FALSE,就是保存文件,初始目錄是當前工作目錄, 初始選擇的文件名是file,初始後綴過濾器是 Chart Files (*.xlc)
CFileDialog dlg(FALSE,NULL ,strAppName+"file",OFN_ENABLESIZING ,szFilter,NULL); // 打開用TRUE, 保存用 FALSE
if(dlg.DoModal() == IDOK)
{
CString strFile = dlg.GetPathName(); // 全路徑
MessageBox(strFile,"Title",MB_OK);
TRACE("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
TRACE(strFile);
TRACE("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
}
二、自動保存在指定路徑
void CSaveDlg::OnSave()
{
CString strText(_T(""));
GetDlgItemText(IDC_EDIT1,strText);// IDC_EDIT1爲EDIT BOX的ID
try
{
CStdioFile file;
file.Open(_T("D:\\abc.txt"),CFile::modeCreate|CFile::modeWrite
|CFile::typeText);
file.WriteString(strText);
file.Close();
}
catch(CFileException *e)
{
e->ReportError();
e->Delete();
}
}