c – 允许IFileOpenDialog选择尚未创建的文件

我在许多应用程序中都看到了这一点您可以选择打开文件,如果该文件不存在,则会创建该文件并且您不会抱怨.全部来自同一个“打开文件”对话框
我使用IFileOpenDialog打开一个文件,如果我输入一个不存在的文件,它会显示一个错误,我无法获取该文件的路径.

我想要的不是获取错误,而是接受不存在的文件名.后来我会创建它.这可能吗?

if (SUCCEEDED(hr))
{
    IFileOpenDialog *pFileOpen;

    // Create the FileOpenDialog object
    hr = CoCreateInstance(
        CLSID_FileOpenDialog,
        NULL, 
        CLSCTX_ALL, 
        IID_IFileOpenDialog, 
        reinterpret_cast<void**>(&pFileOpen)
    );

    if (SUCCEEDED(hr))
    {
        // Show the Open dialog box.
        hr = pFileOpen->Show(NULL);

        // Get the file name from the dialog box.
        if (SUCCEEDED(hr))
        {
            IShellItem *pItem;
            hr = pFileOpen->GetResult(&pItem);
            if (SUCCEEDED(hr))
            {
                PWSTR pszFilePath;
                hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);

                // Check if file actually exists
                if (SUCCEEDED(hr))
                {
                    // Create file if not found
                    if (PathFileExists(pszFilePath) != 1)
                    {

                    }

                    CoTaskMemFree(pszFilePath);
                }
                pItem->Release();
            }
        }
        pFileOpen->Release();
    }
    CoUninitialize();
}

解决方法:

调用IFileDialog :: GetOptions获取默认选项,删除FOS_PATHMUSTEXIST和FOS_FILEMUSTEXIST位,然后使用IFileDialog :: SetOptions设置新选项.

上一篇:c# – OpenFileDialog没有显示


下一篇:【springboot】【@Validated】--使用Spring Validation优雅地进行参数校验