C++ 允许IFileOpenDialog选择一个尚不存在的文件夹

C++ 允许IFileOpenDialog选择一个尚不存在的文件夹,c++,winapi,folderbrowserdialog,C++,Winapi,Folderbrowserdialog,我正在尝试创建一个对话框,以选择要将文件保存到其中的新文件夹。这个类工作得很好,只是它不允许拾取新文件夹 即文件夹:C:\existings\new Folder在对话框底部弹出以下消息: 新文件夹 路径不存在。 请检查路径,然后重试 以下是我得到的代码: IFileDialog* fileDialog CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&fileDia

我正在尝试创建一个对话框,以选择要将文件保存到其中的新文件夹。这个类工作得很好,只是它不允许拾取新文件夹

即文件夹:C:\existings\new Folder在对话框底部弹出以下消息:

新文件夹 路径不存在。 请检查路径,然后重试

以下是我得到的代码:

IFileDialog* fileDialog
CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, 
    IID_PPV_ARGS(&fileDialog));

DWORD options;
fileDialog->GetOptions(&options);

options &= ~FOS_FILEMUSTEXIST;  
options &= ~FOS_PATHMUSTEXIST;
fileDialog->SetOptions(options | FOS_PICKFOLDERS);

fileDialog->Show(parentWindow);
任何指点或黑客将不胜感激!谢谢

引用迈克尔的话:

[为了避免一些评论,SHBrowseForFolder API仍然存在,但对于我们的UI决策者来说仍然不是一个可接受的解决方案。]


这同样适用于此处…

当您选择文件夹时,可以使用文件夹选择器对话框。
这个带有正确标志的对话框在底部有一个创建按钮和一个文本条目,允许您指定一个不存在的路径。

我想您应该使用CLSID\u FileSaveDialog而不是CLSID\u FileOpenDialog。除了基类IFileDialog之外,还可以使用它。

看起来“保存”对话框不再支持FOS_PICKFOLDERS:IFileSaveDialog一开始就不支持它,因为它是IFileSaveDialog标志。这就引出了一个问题:为什么要使用打开的对话框来选择保存内容的位置……Deanna,我试图用本机版本替换Java选择文件对话框,因此它必须与原始行为相匹配。不幸的是,这意味着文件夹选择对话框已退出。通过Java对话框,您可以浏览到一个文件夹并键入新文件夹的名称,以创建一个归档应用程序,在该应用程序中,您可以选择一个新文件夹将一组文件保存到其中。如果使用FOS_PICKFOLDERS,尝试使用IFileOpenDialog会失败。难道他们不能单击本机创建文件夹按钮并选择它吗?这是可能的,只是没有那么好;-想象一下,如果每次你想保存一个文件,你必须单击“创建文件”,然后选择它。@Deanna它就像一个“另存为”对话框。用户正试图指定某物的去向;不在某个位置。在它上面,听起来新应用不鼓励使用SHBrowseForFolder:对于Windows Vista或更高版本,建议您使用带有FOS_PICKFOLDERS选项的IFileDialog,而不是SHBrowseForFolder功能。这在“拾取文件夹”模式下使用“打开文件”对话框,是首选实现。