注册

CpuDbg x96

查看: 1392|回复: 0
收起左侧

GetOpenFileName始终无法设置默认目录

[复制链接]
发表于 2024-6-5 00:09:23 | 显示全部楼层 |阅读模式
正常情况,将目标LNK快捷方式拖拽到调试器里或者附加目标进程,调试器就应该保存目标程序的绝对路径.
下次再F3打开对话框就应该默认打开上一次调试程序的目录.当我和GPT交流了一会,把这个功能加上后.死活是无效的.
问了GPT也就是生硬的回答, 给的代码也是有问题.



GetOpenFileName1

GetOpenFileName1



当出了问题再问GPT,回答依然是教科书式的回答.


GetOpenFileName2

GetOpenFileName2




经过多次测试发现目录只能写 "\" 不能用 "/", 另外, 如果默认是要打开C盘, 只能写 "C:", 不能写成 "C:\\"
而我在实际测试中, 第一次按GPT的写成 "C:\\" 是可以正常打开C盘目录的, 但是第二次之后测试的就一直是失败的.原因不清楚.
总之将 "C:"  后面的双斜干去掉,就一直能正常打开C目录了.下面是按GPT给出的代码,修改后正常的代码.

[C++] 纯文本查看 复制代码
#include <windows.h>
#include <commdlg.h>

void OpenFileDialog()
{
    OPENFILENAME ofn;       // common dialog box structure
    char szFile[260];       // buffer for file name

    // Initialize OPENFILENAME
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    ofn.lpstrFile = szFile;
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = "All Files\0*.*\0Text Files\0*.TXT\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = "C:"; // 设置初始目录
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

    // Display the Open dialog box
    if (GetOpenFileName(&ofn) == TRUE) 
    {
        // User selected a file
        MessageBox(NULL, ofn.lpstrFile, "Selected File", MB_OK);
    }
    else
    {
        // Handle errors here
        DWORD dwError = CommDlgExtendedError();
        if(dwError != 0)
        {
            // Display an error message box
            char errorMsg[100];
            sprintf(errorMsg, "GetOpenFileName failed with error code %lu", dwError);
            MessageBox(NULL, errorMsg, "Error", MB_OK | MB_ICONERROR);
        }
    }
}

int main()
{
    OpenFileDialog();
    return 0;
}

总之打开的绝对路径后面不要加双斜干就对了.







回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2024-12-22 05:41 , Processed in 0.062500 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表