我目前正在维护旧的MFC应用程序,并且在打开文件对话框时遇到问题。该程序有多个不同的部分是用户选择加载的文件,例如声音,视频和其他程序特定的格式。
打开一个对话框应该始终打开一个特定的"文件夹,取决于文件结尾。提供包含" .. \"的目录路径将接受并使用"最后选择的文件"。
打开对话框CString fileDirectory = myHelper.getPath();
// fileDirectory is now "C:\coding\svn\source\MyProgram\..\..\bin\..\data\..\Audio\"
CFileDialog FileDialog(true, _T("MP3;WAV"), _T(fileDirectory), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, _T("All music files (*.WAV;*.MP3)));
if (FileDialog.DoModal() == IDOK)
{ ... }
我使用不同的CDialog类(大约15个,例如编辑audiofiles,用于视频文件),它们都有类似的代码用于打开上面的对话框。
我如何支持CFileDialog的相对路径?
答案 0 :(得分:0)
CFileDialog
支持设置初始/默认文件夹。以下是演示如何使用它的代码段:
const TCHAR szFilter[] = _T("Parameter Files (*.npf)|*.npf|All Files (*.*)|*.*||");
CFileDialog dlg(TRUE, _T("npf"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);
CString sParametersDir(CUtility::GetParametersDir());
dlg.m_ofn.lpstrInitialDir = sParametersDir.GetBuffer(_MAX_PATH);
if(dlg.DoModal() == IDOK)
{
m_ParametersFileEdit.SetWindowText(dlg.GetPathName());
}
sParametersDir.ReleaseBuffer();
还有关于你的代码。无需对_T()
个对象使用CString
宏。 CString
类确实自动支持UNICODE。 _T()
宏只应用于字符串文字。
您可以使用CPath
类来规范化文件路径。
CPath path(sPath);
path.AddBackslash();
path.Append(_T("Config"));
path.Canonicalize();