gpt4 book ai didi

c++ - 具有相对路径的 CFileDialog

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:06 27 4
gpt4 key购买 nike

我目前正在维护一个旧的 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 个,例如用于编辑音频文件,用于视频文件)并且它们都有类似的代码来打开上述对话框。

如何支持 CFileDialog 的相对路径?

最佳答案

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();

还有关于您的代码。 CString 对象不需要使用 _T() 宏。 CString 类自动支持 UNICODE。 _T() 宏应该只用于字符串文字。

您可以使用CPath 类来规范化文件路径。

CPath path(sPath);
path.AddBackslash();
path.Append(_T("Config"));
path.Canonicalize();

关于c++ - 具有相对路径的 CFileDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40791062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com